web-dev-qa-db-ja.com

日時MYSQLフォーマットでフィルターする

そのテーブルのログファイルに使用されるMysqlテーブルがあり、「log_date」というフィールドがあり、次の形式で日付を保存します(%Y-%m-%d%H:%i。%s ).DBでは、日付は2013-20-05 00:00.00のように見えます。今日の日付が2013-20-05で、2013-01-01から現在までのログファイルがあるとします。このようなクエリを実行すると:

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') < '2013-05-05 00:00.00'

これは、2013-05-05 00:00.00より大きい行を含むDBのすべての行を返しています

そして、次のようなクエリで<(より小さい)を>(より大きい)に逆変換すると、

SELECT * FROM log_table
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') > '2013-05-05 00:00.00'

次に、ゼロ行を返します。タイムスタンプは、DateTime形式ではなく、以前の日付形式で作業した問題の原因であると思います。なんでこんなことが起こっているの?

14
Ryan Bauer

log_dateはDateTimeデータ型である必要があります。 MySQL DATE関数を使用する方がはるかに簡単です。いくつかの例

SELECT * FROM log_table
WHERE DATE(log_date) < '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) > '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN '2013-04-05' AND '2013-05-05'

SELECT * FROM log_table
WHERE DATE(log_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY)
24
blotto

試してみてください。

  WHERE DATE_FORMAT(AUCTION_DATE, '%Y%m%d') >= DATE_FORMAT('2013/5/18', '%Y%m%d')

now()関数を使用して今日の日付を取得することもできます。

0
Cataclysm