我有一个很长的(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中是否有任何等效的语句?
答案 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;