2009-07-31 117 views
1

我有一個包含每個記錄的unix時間戳的字段的表。 我想返回每個年份和月份等於當前年份和月份的每一行。SQL比較兩個unix時間戳?

有沒有簡單的方法來做到這一點?

感謝

回答

1

這將您的UNIX時間戳(這我假設被存儲在某種類型的數字類型的列)轉換爲datetime:

SELECT dateadd(s, MyTimeStampCol, '19700101') 

鑑於這種情況,你應該能夠做到這樣的事情:

SELECT * --(Your columns) 
FROM MyTable 
WHERE YEAR(dateadd(s, MyTimeStampCol, '19700101')) = year(getdate()) 
AND  month(dateadd(s, MyTimeStampCol, '19700101')) = month(getdate()) 

順便說一句 - 我有Unix的時間戳沒有經驗,所以我用這個作爲參考:

http://www.unixtimestamp.com/index.php

編輯:如果你不是SQL Server上,你需要使用CURRENT_TIMESTAMP代替GETDATE再次

編輯:來想想看,如果你不使用SQL服務器,我不確定是否dateadd會工作。不能告訴我幾乎完全使用SQL Server,可以嗎?

0
man ctime 

計算您感興趣的月份和年份的Unix時間值的上限和下限,然後執行簡單的SQL比較。

0

的SQL Server 2005+:

WITH dates AS (
    SELECT t.timestampCol, 
      YEAR(DATEADD(s, t.timestampCol, '19700101')) 'year', 
      MONTH(DATEADD(s, t.timestampCol, '19700101')) 'month' 
     FROM TABLE t) 
SELECT t.* 
FROM TABLE t 
JOIN dates d ON d.timestampCol = t.timestampCol 
WHERE d.year = YEAR(GETDATE()) 
    AND d.month = MONTH(GETDATE()) 

的Oracle 9i中+:

WITH dates AS (
    SELECT t.timestampCol, 
      EXTRACT(YEAR FROM t.timestampCol + (1/(24*60*60) * 19700101) 'year', 
      EXTRACT(MONTH FROM t.timestampCol + (1/(24*60*60) * 19700101) 'month' 
     FROM TABLE t) 
SELECT t.* 
FROM TABLE t 
JOIN dates d ON d.timestampCol = t.timestampCol 
WHERE d.year = EXTRACT(YEAR FROM SYSDATE) 
    AND d.month = EXTRACT(MONTH FROM SYSDATE)