Как проверить дату и дату и время с MySQL - PullRequest
1 голос
/ 20 декабря 2009

Моя таблица использует дату и время (YYYY-MM-DD HH:MM:SS), и мне нужно отобразить сегодняшние записи.

мой код только:

SELECT   * 
FROM     table 
WHERE    date = '$date' 
ORDER    BY score DESC

с

$date = date("Y-m-d");

хорошо, как и ожидалось, это не работает: | у вас, ребята, есть решение здесь?

Ответы [ 4 ]

11 голосов
/ 20 декабря 2009

Исходя из Паскаля Мартина, вы можете извлечь часть даты из поля даты + времени:

SELECT * FROM table WHERE DATE(date) = '2009-12-19'

Источник: MySQL - Функции даты и времени

Имейте в виду, однако, что этот запрос не будет использовать индекс в вашем поле даты + времени, если он у вас будет. ( Переполнение стека: как создать индекс для части даты поля DATETIME в MySql )

4 голосов
/ 20 декабря 2009

Ваша дата - "2009-12-19" (или что-то подобное, в зависимости от дня), что интерпретируется как "2009-12-19 00:00:00".

В вашей базе данных у вас, вероятно, нет ни одной даты, точно совпадающей с той, с точностью до секунды: ваши даты похожи на "2009-12-19 12:15:32".

Решение - сравнить так:

select *
from table
where date >= '2009-12-19'
    and date < '2009-12-20'

Что будет интерпретироваться как:

select *
from table
where date >= '2009-12-19 00:00:00'
    and date < '2009-12-20  00:00:00'

И, если вы не хотите выполнять математику, чтобы получить дату следующей даты, вы можете использовать функцию adddate:

select *
from table
where date >= '2009-12-19'
    and date < adddate('2009-12-19', interval 1 day)

Итак, в вашем случае что-то вроде этого должно сработать:

select *
from table
where date >= '$date'
    and date < adddate('$date', interval 1 day)
order by score desc
0 голосов
/ 20 декабря 2009

Вы сравниваете дату и время с выражением даты, поэтому оно не работает. Используйте метод Date (), чтобы вернуть часть даты из datetime, а затем выполнить сравнение. WHERE DATE (date) = '$ date' должен делать. Возможно, вам придется использовать псевдонимы для обработки этого конфликта имен.

0 голосов
/ 20 декабря 2009

Возможно, вы захотите отформатировать данные при выборе:

SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table
WHERE dateformat = '$date' ORDER BY score DESC
...