【问题标题】:What will be the translation of ms Sql query to oraclems Sql query 到 oracle 的翻译会是什么
【发布时间】:2023-03-29 10:15:01
【问题描述】:

sql查询是:

Declare @Calculation DECIMAL=ABS(DATEDIFF(SECOND,@NowTime,@ShiftStartTime))/DATEDIFF(SECOND,'00:00:00.0000',@TaktTime)

这里 NowTime、ShiftStartTime 和 TaktTime 是时间戳变量,Calculation 是数字格式。 提前致谢。

【问题讨论】:

  • 提供您正在使用的输入变量的值...
  • 在 ms sql 中:使用 time(7) 数据类型,NowTime:13:30:00.0000000, ShiftStartTime:06:00:00.0000000,TaktTime:14:30:00.0000000
  • 我想用oracle的时间戳从sql映射time(7)

标签: oracle database-migration datediff


【解决方案1】:

Oracle 没有TIME 数据类型——它有DATE(天数到整数秒精度)和TIMESTAMP(9)(天数到纳秒精度)。如果您打算使用TIME(7) 和小数秒,那么您想使用TIMESTAMP(7),然后将使用Oracle 的INTERVAL DAY TO SECOND 数据类型计算差异:

DECLARE
  NowTime        TIMESTAMP(7) := SYSTIMESTAMP; -- TIMESTAMP '2018-01-22 13:30:00.0000000';
  ShiftStartTime TIMESTAMP(7) := TIMESTAMP '2018-01-22 06:00:00.0000000';
  TaktTime       TIMESTAMP(7) := TIMESTAMP '2018-01-22 14:30:00.0000000';

  ShiftLength    INTERVAL DAY(3) TO SECOND(7) := NowTime - ShiftStartTime;
  TaktLength     INTERVAL DAY(3) TO SECOND(7) := TaktTime - TRUNC( TaktTime );

  Value NUMBER;
BEGIN
  Value := ABS(
             (
               EXTRACT( DAY    FROM ShiftLength ) * 24 * 60 * 60
               EXTRACT( HOUR   FROM ShiftLength )      * 60 * 60
               EXTRACT( MINUTE FROM ShiftLength )           * 60
               EXTRACT( SECOND FROM ShiftLength )
             )
             /
             (
               EXTRACT( DAY    FROM TaktLength ) * 24 * 60 * 60
               EXTRACT( HOUR   FROM TaktLength )      * 60 * 60
               EXTRACT( MINUTE FROM TaktLength )           * 60
               EXTRACT( SECOND FROM TaktLength )
             )
           );
END;
/

【讨论】:

    【解决方案2】:
    SQL> declare
      2    NowTime        date := to_date('2010-11-18 23:45:12', 'yyyy-mm-dd hh24:mi:ss');
      3    ShiftStartTime date := to_date('2010-11-18 22:44:40', 'yyyy-mm-dd hh24:mi:ss');
      4    TaktTime       date := to_date('2020-01-01 00:03:11', 'yyyy-mm-dd hh24:mi:ss');
      5  begin
      6    dbms_output.put_line('Result = ' || (TaktTime - trunc(TaktTime)) / (NowTime - ShiftStartTime));
      7  end;
      8  /
    
    Result = ,05258810572687224669603524229074
    

    【讨论】:

      猜你喜欢
      • 2018-06-02
      • 2010-09-07
      • 2019-02-23
      • 1970-01-01
      • 2021-09-03
      • 2020-07-05
      • 2013-05-12
      • 2021-10-05
      • 1970-01-01
      相关资源
      最近更新 更多