50

列の時間部分を無視して、MySQLの日付を比較する必要がありDateTimeます。次のSQLを試しました。

SELECT * FROM order_table where order_date=date_format('2012-05-03', '%Y-%m-%d');

2012-05-03 10:16:46MySQLテーブルに日付がある場合でも、行は取得されません。DateTimeMySQLで日付を比較するときに、フィールドの時間部分を無視するにはどうすればよいですか?

4

8 に答える 8

83

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'
于 2012-05-27T19:12:36.270 に答える
8

日付を渡したい場合は、次のようなものを試すことができます。

where YEAR(order_date)='2012' AND MONTH(order_date)='05' AND DAY(order_date)='03'

あなたはより多くの機能のためにこれを見ることができます。

于 2012-05-27T19:17:10.520 に答える
5

@Markは優れたアプローチを採用していますが、その場合は常に翌日を計算して見つける必要があることに注意してください。それを避け、それでも時間を無視したい場合は、次のようにすることができます。

WHERE order_date >= '2012-05-27 00:00:00' AND order_date <= '2012-05-27 23:59:59'

これが理にかなっていることを願っています。

于 2012-05-27T19:51:09.807 に答える
4
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
于 2012-05-27T19:13:10.353 に答える
2

たぶん、あなたはのような機能を使うことができますdate()。ただし、この場合、インデックスを使用できないため、速度を下げることができます。だから、私は使用することをお勧めします

SELECT * FROM order_table 
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
于 2012-05-27T19:20:16.260 に答える
2

これは少し古いです....しかし、正しい答えは、以下のように列order_dateでdate_formatを使用することでもあります。

SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03';
于 2017-06-22T12:15:08.283 に答える
0

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のドキュメントを参照してください。

于 2016-09-21T11:12:49.367 に答える
0

私の場合、私は持っていました、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')
于 2018-02-21T16:54:30.907 に答える