SQL Server中的“ TO_TIMESTAMP(TO_CHAR(TO_DATE(')语​​句

时间:2019-03-20 17:05:09

标签: sql sql-server oracle migration

我有一个很长的(Oracle)SQL查询,它的开始是这样的:

SELECT 0 run_id, 
0 tran_id,
0 sort_id,
' ' tran_type,
10 prod_id,
72 type_id,
1 value,  
TO_TIMESTAMP(TO_CHAR(TO_DATE(
'2016-03-18 00:00:00',
'YYYY.MM.DD HH24:MI:SS') 
+ rownum -1,
'YYYY.MM.DD')  

现在,我想在SQL Server中进行等效查询,但是我不知道如何执行TO_TIMESTAMP(TO_CHAR(TO_DATE()))部分。一个名为SQLines的工具给了我类似的东西:TO_TIMESTAMP(ISNULL(TO_CHAR(CONVERT(DATETIME, '2016-03-18 00:00:00', 'YYYY.MM.DD HH24:MI:SS'),但这显然是错误的。在SQL Server中是否有任何等效的语句?

2 个答案:

答案 0 :(得分:1)

我认为逻辑是:

SELECT . . . 
       DATEADD(day, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1,
               '2016-03-18'
              );

答案 1 :(得分:0)

根据我所理解的代码所做的事情,这可能是等效的。它会截断时间并将天数添加为rownum-1。

--This is to create sample rows
WITH 
E(n) AS(
    SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0))E(n)
),
E2(n) AS(
    SELECT a.n FROM E a, E b
),
E4(n) AS(
    SELECT a.n FROM E2 a, E2 b
),
cteTally(rownum) AS(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) n
    FROM E4
)
--This is the actual formula
SELECT CONVERT( datetime2, DATEADD( DD, DATEDIFF( DD, 0,  '2016-03-18 00:00:00') + rownum - 1, 0))
FROM cteTally;