我有一个表,其中的字段包含每条记录的unix时间戳。 我想返回年和月等于当前年份和月份的每一行。
有一种简单的方法吗?
由于
答案 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)