4

これを試した

select * from table where timestamp_field between 1330560000 and 1336170420

この

select * from table where timestamp_field >=1330560000 and timestamp_field<=1336170420

どちらも空の結果セットを返します。

でもこれは

select * from table where timestamp_field >= 1330560000

すべての行を返します

物事をもっと不条理にするために

select * from table where timestamp_field <= 1336170420

空の結果セットを返します。

もちろん、1336170420=2012 年 5 月 4 日と 1330560000=1.2012 年 3 月の間に、前後のタイムスタンプ値が存在します。

タイムスタンプの値は問題ありません。少なくとも phpmyadmin は正しい (人間が読める) 日時の値を示します。文字列を解析してタイムスタンプを作成しました。

UPDATE table SET timestamp_field = STR_TO_DATE(timestamp_string, '%d.%m.%Y')

私は何かが足りないと思いますが、何が見つかりません!?

4

2 に答える 2

6

MySQL は、整数ではなく日付リテラルを想定しています。

SELECT *
FROM   table
WHERE  DATE(timestamp_field) BETWEEN '2012-03-01' AND '2012-05-04'

整数を使用するには (UNIX エポックからの秒数であると仮定して)、最初に MySQL のFROM_UNIXTIME()関数を使用して変換します。

SELECT *
FROM   table
WHERE  timestamp_field BETWEEN FROM_UNIXTIME(1330560000)
                           AND FROM_UNIXTIME(1336170420)

またはUNIX_TIMESTAMP()、列を UNIX 表現に変換するために使用します。

SELECT *
FROM   table
WHERE  UNIX_TIMESTAMP(timestamp_field) BETWEEN 1330560000 AND 1336170420
于 2012-06-04T21:16:36.247 に答える
0

SQLコードを使用しているときに、タイムスタンプfrom_unixtime(timestamp / 1000)をdateTimeとして変換してみませんか?あなたはそれを試しましたか?

于 2012-06-04T20:59:34.807 に答える