Вероятно, название немного сложнее. У меня есть эта таблица:

| 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?

0
alessandro buffoli 19 Авг 2018 в 12:20

3 ответа

Лучший ответ

Можно использовать простые функции даты и времени:

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';
2
Sloan Thrasher 19 Авг 2018 в 09:26

Я бы порекомендовал написать запрос как:

SELECT t.*
FROM `table` t
WHERE `data_start` > '2018-08-06 09:00:00' AND  
      `data_start` < '2018-08-07';

Избегая функций в data_start, условия WHERE делают это более вероятным, чем индекс - если он доступен - будет использоваться для запроса.

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

1
Gordon Linoff 19 Авг 2018 в 11:21

Вы можете использовать дату и час

select * 
from my_table 
where date(date_start) = curdate() 
      and hour(date_start) > 9 
2
scaisEdge 19 Авг 2018 в 09:24
51916213