SQL比较两个unix时间戳?

时间:2009-07-31 14:18:43

标签: sql unix timestamp compare

我有一个表,其中的字段包含每条记录的unix时间戳。 我想返回年和月等于当前年份和月份的每一行。

有一种简单的方法吗?

由于

3 个答案:

答案 0 :(得分:1)

这会将你的unix时间戳(我假设存储在某种数字类型的列中)转换为日期时间:

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())

BTW - 我没有使用Unix时间戳的经验,因此我将其作为参考使用:

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

编辑:如果您不在SQL Server上,则需要使用CURRENT_TIMESTAMP来代替getdate

再次编辑:想一想,如果你没有使用SQL Server,我不确定dateadd是否可行。不能告诉我几乎完全使用SQL Server,可以吗?

答案 1 :(得分:0)

man ctime

计算您感兴趣的月份和年份的Unix时间值的上限和下限,然后进行简单的SQL比较。

答案 2 :(得分: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)