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 を使用していない場合は、getdate の代わりに CURRENT_TIMESTAMP を使用する必要があります

もう一度編集してください。考えてみると、SQL Server を使用していない場合、dateadd が機能するかどうかわかりません。私が SQL Server だけを使って仕事をしているとは言えませんね。

于 2009-07-31T14:23:58.317 に答える
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)
于 2009-07-31T20:13:35.203 に答える
0
man ctime

関心のある月と年の Unix 時間値の上限と下限を計算し、単純な SQL 比較を行います。

于 2009-07-31T14:42:15.790 に答える