/ / Mysql, як отримати дані на основі часу? - mysql

Mysql, як отримати дані на основі часу? - mysql

Мені потрібно отримати дані з таблиці на основічас і дата, тобто мені потрібно отримати дані з 5:00 вечора до поточного дня до 17:00. Я спробував наступний код, в якому я отримав вчора і сьогодні, але з часом це не допомагає вирішити цю проблему Примітка: стовпець змінився в мітку

SELECT *
FROM `mdl_forum_posts`
WHERE from_unixtime(modified, "%Y-%m-%d") = CURDATE()
OR from_unixtime(modified, "%Y-%m-%d") = date(CURDATE()-1)

Відповіді:

1 для відповіді № 1
SELECT * FROM `mdl_forum_posts`
WHERE modified BETWEEN UNIX_TIMESTAMP(
CONCAT(DATE_FORMAT(CURDATE()- INTERVAL 1 DAY, "%Y-%m-%d"), " 17:00:00"))
AND UNIX_TIMESTAMP(
CONCAT(CURDATE(), " 17:00:00"));

Зауважте, що CURDATE () є поліморфний; DATE_FORMAT необхідний для першого предиката, де розрахунок приводить до типу типу, що повертається як ціле.

Атрибути обгортання у функції всерединіпредикати відключають використання індексів - застосування зворотної функції до літерала дозволяє використовувати для використання індексів (і навіть за відсутності індексів буде швидше, оскільки функція повинна бути тільки evaulated один раз).


0 для відповіді № 2

якщо дата 1 місяця CURDATE () - INTERVAL 1 DAY дає точну дату попереднього дня

SELECT * FROM `mdl_forum_posts`
WHERE modified BETWEEN UNIX_TIMESTAMP(
CONCAT(CURDATE() - INTERVAL 1 DAY, "%Y-%m-%d"), " 17:00:00"))
AND UNIX_TIMESTAMP(
CONCAT(CURDATE(), " 17:00:00"));