1

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

有没有一种简单的方法可以做到这一点?

谢谢

4

3 回答 3

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

顺便说一句 - 我对 Unix 时间戳没有经验,所以我用这个作为参考:

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

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

再次编辑:想一想,如果您不使用 SQL Server,我不确定 dateadd 是否有效。不能说我几乎只使用 SQL Server,你可以吗?

于 2009-07-31T14:23:58.317 回答
0
man ctime

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

于 2009-07-31T14:42:15.790 回答
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())

甲骨文 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)
于 2009-07-31T20:13:35.203 回答