DateTime
列の時間部分を無視して、MySQLの日付を比較する必要があります。次のSQLを試しました。
SELECT * FROM order_table where order_date=date_format('2012-05-03', '%Y-%m-%d');
MySQLテーブルに日付2012-05-03 10:16:46
があっても行を取得しません。 MySQLで日付を比較するときに、DateTime
フィールドの時間部分を無視するにはどうすればよいですか?
DATE
関数を使用できます。
SELECT col1, col2, ..., coln
FROM order_table
WHERE date(order_date) = '2012-05-03'
ただし、テーブルが大きく、order date
にインデックスがある場合、これはより効率的です。
SELECT col1, col2, ..., coln
FROM order_table
WHERE order_date >= '2012-05-03'
AND order_date < '2012-05-04'
日付を渡したい場合は、次のようなものを試すことができます。
where YEAR(order_date)='2012' AND MONTH(order_date)='05' AND DAY(order_date)='03'
より多くの機能については this をご覧ください。
@Markには良いアプローチがありますが、その場合は常に次の日を計算して見つける必要があることに注意してください。それを避けながら時間を無視したい場合は、次のようにします。
WHERE order_date >= '2012-05-27 00:00:00' AND order_date <= '2012-05-27 23:59:59'
これが理にかなっていることを願っています。
たぶん、 date()
のような関数を使用できます。ただし、この場合、インデックスを使用できないため、速度を下げることができます。だから、使用することをお勧めします
SELECT * FROM order_table
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
これは少し古いですが..正しい答えは、以下のようにorder_date列でdate_formatを使用することでもあります:
SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03';
mySQLで日付を比較する場合、次のいずれかを使用できます。
DATEDIFF() Subtract two dates
TIMEDIFF() Subtract time
TIMESTAMPDIFF() Subtract an interval from a datetime expression
PERIOD_DIFF() Return the number of months between periods
日付関数の詳細については、MySQL ドキュメント 。
私の場合、DATE_FORMAT
およびCONVERT_TZ
私のために働いた唯一のものはこれです
DATE_FORMAT(CONVERT_TZ(`order_item`.created, '+0:00', '+2:00'), '%d/%m/%Y %H:%i')
BETWEEN
('12/02/2018 01:42')
AND
('12/02/2018 10:51')