Выберите все поля (datetime), где час больше определенного часа, а день - только текущий день

0

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

| 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, поэтому в основном я хочу получить только второе и третье поля. Как выбрать дату в формате даты и времени?

  • 2
    Между «2018-08-06 00:09:00» и «2018-08-06 23:59:59».
Теги:
select

3 ответа

2
Лучший ответ

Можно использовать простые функции 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';
  • 1
    Я бы пошел с вариантом 2.
  • 1
    Запросы не совпадают: первый исключает 09:00:00 , второй включает 09:00:00 . Одна из причин, по которой я предпочитаю> и < between , особенно когда речь идет о датах.
2

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

select * 
from my_table 
where date(date_start) = curdate() 
      and hour(date_start) > 9 
1

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню