2012-10-03 175 views
0

我有一個日期/時間字段存儲爲數據庫中的BIGINT。我需要檢索數據庫中的日期大於當前日期30天以後的記錄。我嘗試了以下,它的工作原理。SQL Server比較日期在bigint與當前日期

有更好/更簡單的方法來實現它嗎?

select 
    datediff(day, CONVERT(DATE, DATEADD(s, dateInBigint/1000, '19700101'), 102), 
        CONVERT(date, getdate(),102)); 

例如爲:

select 
    datediff(day, CONVERT(DATE, DATEADD(s, 1348986702000/1000, '19700101'), 102), 
       CONVERT(date, getdate(), 102)); 
+3

你爲什麼要將'date'字段存儲爲'bigint'? – Taryn

+0

你的例子中的值的含義是什麼? –

+0

通常我們使用'DATE'或'DATETIME'數據類型來存儲日期。我必須同意@bluefeet - 爲什麼你將它們存儲爲'BIGINT'?你認爲你通過這樣做獲得了什麼?你已經有一些想法,你失去了什麼... –

回答

0

你可以嘗試:

select 
     datediff(day, CONVERT(DATE, DATEADD(ms, dateInBigint, '19700101'), 102), 
         CONVERT(date, getdate(),102)); 

它可能會快一點。

+0

收到的錯誤 - '算術溢出錯誤將表達式轉換爲數據類型int' select datediff(day,CONVERT(DATE,DATEADD(ms,1348986702000,'19700101'),102 ),CONVERT(date,getdate(),102)); \t \t \t \t 消息8115,級別16,狀態2,行1個 算術溢出錯誤將表達式轉換爲數據類型爲int – user1573133

+0

1348986702000太大類型爲int的 - 看起來像你原來的slect是唯一的出路 - 您的日期是1970/01/01以來的毫秒數 - 它們相當大:) – Jimbo