вероятно, название немного сложно. У меня есть эта таблица:
| id_ordineX | data_start |
+------------+---------------------+
| ordine1 | 2018-08-06 08:00:00 |
| ordine1 | 2018-08-06 10:45:00 |
| ordine2 | 2018-08-06 16:20:00 |
| ordine2 | 2018-08-07 09:20:00 |
Я хочу выбрать все поля, где data_start > 2018-08-06 09:00:00
, таким образом я получаю в результате все последние 3 поля, но я хочу выбрать только результат со дня 2018-08-06
, поэтому в основном я хочу получить только второе и третье поля. Как выбрать дату в формате даты и времени?
Можно использовать простые функции datetime:
SELECT *
FROM 'table'
WHERE 'data_start' > '2018-08-06 09:00:00' AND DATE('data_start') = '2018-08-06';
Или вы можете указать диапазон:
SELECT *
FROM 'table'
WHERE 'data_start' BETWEEN '2018-08-06 09:00:00' AND '2018-08-06 23:59:59';
09:00:00
, второй включает 09:00:00
. Одна из причин, по которой я предпочитаю> и < between
, особенно когда речь идет о датах.
Вы можете использовать дату и час
select *
from my_table
where date(date_start) = curdate()
and hour(date_start) > 9
Я бы рекомендовал написать запрос как:
SELECT t.*
FROM 'table' t
WHERE 'data_start' > '2018-08-06 09:00:00' AND
'data_start' < '2018-08-07';
Избегая функций на data_start
, условия WHERE
делают его более вероятным, чем индекс - если он доступен - будет использоваться для запроса.
Я также думаю, что это очень хорошо описывает логику, которую вы хотите реализовать.