Оператор TO_TIMESTAMP (TO_CHAR (TO_DATE () в SQL Server - PullRequest
0 голосов
/ 20 марта 2019

У меня длинный (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 ]

1 голос
/ 20 марта 2019

Я думаю, что логика:

SELECT . . . 
       DATEADD(day, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1,
               '2016-03-18'
              );
0 голосов
/ 20 марта 2019

Согласно тому, что я понял, код делает, это может быть эквивалентом. Он усекает время и добавляет дни как 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...