簡體   English   中英

SQL Server中的'TO_TIMESTAMP(TO_CHAR(TO_DATE('

[英]'TO_TIMESTAMP(TO_CHAR(TO_DATE(' statement in SQL Server

我有一個很長的(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中是否有與此等效的語句?

我認為邏輯是:

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

據我了解代碼正在做什么,這可能是等效的。 它會截斷時間並將天數添加為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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM