2013-02-12 44 views
1

將數據庫從Oracle轉換爲SQL Server。我需要類似於甲骨文讓我用日期做一些事情:帶有浮點數的SQL Server日期數學(如Oracle中的sysdate + 1.4793625天)

... WHERE tbl.date_col < sysdate - 1.234 

其中浮法代表小數天數(浮點值將被傳遞的)。

DATEADD只接受第二個參數的整數,所以不起作用。看起來有點哈克提前做一些數學,然後有

DATEADD(year, ?, DATEADD(month, ?, DATEADD(day, ?, DATEADD(hour, ?, 
    DATEADD(well, you get the picture))))) 

請告訴我有一個更優雅和可讀的解決方案。 :)

回答

3

SQL Server正在完全擺脫這種能力。例如,你可以說:

SELECT GETDATE() + 1; 

但是你不能做到這一點與新的日期/時間類型,例如:

SELECT CONVERT(DATE, GETDATE()) + 1; 

產量:

消息206,級別16,狀態2,行1
操作數類型衝突:日期與int不兼容

所以我強烈建議你停止使用FLOAT和簡寫日期數學。如果您正在嘗試減去部分天數,請先將其轉換爲最重要的粒度,然後使用該粒度的DATEADD。例如下面的作品就好了:

WHERE tbl.date_col < DATEADD(SECOND, 86400*-1.234, GETDATE()); 
+0

呀,關於爲什麼有些隱式轉換等不允許datetime和DATETIME2(例如)之間的差值的文檔是不是超滿足我,但我是一個不打架的巨大粉絲(因爲這可能會導致更多的問題,而不是解決問題)。感謝你的回答 – jinglesthula 2013-02-12 16:44:01