Вопрос по date, datetime, date-comparison, mysql – Сравнение дат в MySQL без учета временной части поля DateTime

32

Мне нужно сравнить даты в MySQL, игнорируя часть времени вDateTime колонка. Я пробовал следующий SQL.

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

Он не извлекает ни одной строки, даже если есть дата2012-05-03 10:16:46 в таблице MySQL. Как может доля времени вDateTime поле будет игнорироваться при сравнении дат в MySQL?

что такое тип данных order_date? Sebas
Это & APOS; sDateTime. Tiny

Ваш Ответ

8   ответов
2
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03';
это не может использовать индекс наorder_date
1

rmat в столбце order_date, как показано ниже:

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

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документация.

7

вы можете попробовать что-то вроде этого:

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

Вы можете посмотреть наэтот для большего количества функций.

3

но просто будьте осторожны, чтобы вам всегда приходилось просчитывать и находить следующий день в этом случае. Если вы хотите избежать этого и все еще игнорировать время, вы можете сделать следующее:

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

Я надеюсь это имеет смысл.

53

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'
2

date(), Но в этом случае скорость может быть уменьшена, потому что индекс не может быть использован. Итак, я рекомендую использовать

SELECT * FROM order_table 
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59')
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')

Похожие вопросы