各レコードの 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 を使用していない場合は、getdate の代わりに CURRENT_TIMESTAMP を使用する必要があります
もう一度編集してください。考えてみると、SQL Server を使用していない場合、dateadd が機能するかどうかわかりません。私が SQL Server だけを使って仕事をしているとは言えませんね。
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)
man ctime
関心のある月と年の Unix 時間値の上限と下限を計算し、単純な SQL 比較を行います。