我有一个包含每条记录的 unix 时间戳的字段的表。我想返回年份和月份等于当前年份和月份的每一行。
有没有一种简单的方法可以做到这一点?
谢谢
这会将您的 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,你可以吗?
man ctime
计算您感兴趣的月份和年份的 Unix 时间值的上限和下限,然后进行简单的 SQL 比较。
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)