Как сравнить дату отметки времени с параметром только для даты в MySQL?
в инструкции SQL, как я могу сравнить дату, сохраненную как отметка времени с датой в формате гггг-ММ-ДД?
Ex.:SELECT * FROM table WHERE timestamp = '2012-05-05'
Я хочу, чтобы этот запрос возвращает все строки, имеющие метку времени в указанный день, но он возвращает только строки, имеющие полуночную метку времени.
спасибо
8 ответов:
можно использовать
DATE()
функция для извлечения части даты метки времени:SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
хотя, если у вас есть индекс для столбца timestamp, это будет быстрее, потому что он может использовать индекс:
SELECT * FROM table WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
используйте функцию преобразования MYSQL:
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
Это должно работать
в случае, если вы используете параметры SQL для выполнения запроса, то это будет полезным
SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
когда я прочитал Ваш вопрос, я думал, что вы были на Oracle DB пока я не увидел тег 'MySQL'. Во всяком случае, для людей, работающих с Oracle, вот так:
SELECT * FROM table where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');
как предлагают некоторые, с помощью
, используяDATE(timestamp)
вы применяете манипуляции к столбцу, и поэтому вы не можете полагаться на порядок индексов.BETWEEN
будет надежным только в том случае, если вы включите миллисекунды. В Примере меткуBETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
вы исключаете записи с меткой времени между2012-05-05 23:59:59.001
и2012-05-05 23:59:59.999
. Однако даже этот метод имеет некоторые проблемы, из-за точности типов данных. Иногда 999 миллисекунд округляется.лучшие что нужно сделать, так это:
SELECT * FROM table WHERE date>='2012-05-05' AND date<'2012-05-06'