Подтвердить что ты не робот

Как сравнить даты timestamp с параметром date-only в MySQL?

В инструкции SQL, как сравнить дату, сохраненную как TIMESTAMP, с датой в формате YYYY-MM-DD?

Пример: SELECT * FROM table WHERE timestamp = '2012-05-05'

Я хочу, чтобы этот запрос возвращал все строки с меткой времени в указанный день, но он возвращает только строки, имеющие метку времени в полночь.

спасибо

4b9b3361

Ответ 1

Вы можете использовать функцию 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'

Ответ 2

 WHERE cast(timestamp as date) = '2012-05-05'

Ответ 3

SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59'

Ответ 4

Используйте функцию преобразования MYSQL:

SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05' 

Это должно работать

Ответ 5

Как полагают некоторые, используя 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'

Ответ 6

Если вы используете SQL-параметры для запуска запроса, это было бы полезно

SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')

Ответ 7

использование

SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05' 

Ответ 8

Когда я прочитал ваш вопрос, я подумал, что вы были Oracle DB, пока не увидели тег 'MySQL'. В любом случае, для людей, работающих с Oracle, это способ:

SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');