mysql - отметка времени поиска по часу дня - PullRequest
8 голосов
/ 01 февраля 2011

У меня есть столбец с именем updatetime, то есть timestamp.Так, например, среднее значение может быть: 2011-02-01 09:00:51.Я хочу иметь возможность искать и возвращать все результаты за определенный час дня независимо от даты.

Например, если бы я искал в столбце значения BETWEEN 09:00:00 AND 09:59:99, он вернул бы:

2011-02-01 09:00:51
2011-01-31 09:20:51
2011-01-11 09:55:44
etc....

SELECT * FROM table WHERE updatetime ......

Мысли?

Ответы [ 5 ]

17 голосов
/ 01 февраля 2011

Вы можете использовать функцию HOUR () :

SELECT * FROM 'table' WHERE HOUR(`updatetime`) = 9

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

Что мы сделали в аналогичной ситуации: мы создали еще один столбец updatetime_hour, проиндексировали его и заполнили его при вставке (и обновили при обновлении); тогда запрос становится быстрым:

SELECT * FROM 'table' WHERE `updatetime_hour` = 9

Да, мы денормализовали данные, и это немного более удобно, но я еще не нашел более быстрого решения. (Мы рассмотрели и измерили триггеры вставки и обновления, чтобы заполнить updatetime_hour из updatetime, но решили отказаться от производительности; посмотрите, будут ли они вам полезны.)

1 голос
/ 01 февраля 2011
SELECT * FROM table WHERE hour('updatetime') = 9;

Вернется в 9 утра ..

1 голос
/ 01 февраля 2011

Попробуйте с HOUR():

SELECT * FROM table WHERE HOUR(updatetime) = 9;

Это вернет все строки с 09:00:00 до 09: 59: 59.

HOUR() просто возвращает часовую часть даты.

0 голосов
/ 19 января 2018

Эти ответы не работают, это то, что работало только для меня

SELECT hour(FROM_UNIXTIME(`updatetime`)) AS date_formatted FROM `table` where hour(FROM_UNIXTIME(`updatetime`))='9'
0 голосов
/ 01 февраля 2011

Возможность: SELECT * FROM 'table' WHERE HOUR(updatetime)='09';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...