2013-05-04 1 views
4

Я пытаюсь получить записи предыдущего дня из таблицы, но я не нахожу, как это сделать точно. Нужна ваша помощь, пожалуйста ..Как получить записи предыдущего дня из таблицы mysql?

Таблица: RECORD_DATA

id  creationDate  
1 | 2013-05-03 04:03:35 |  
2 | 2013-05-03 04:03:35 | 

Теперь мне нужно получить все записи, которые были созданы на 2013-05-03. Время может быть любым. Поэтому мой запрос должен иметь оператор LIKE.

Я использую ниже запрос, и он дает мне пустой набор.

select creationDate from RECORD_DATA 
where creationDate LIKE DATE_SUB(STR_TO_DATE('2012-04-05','%d/%m/%Y'),INTERVAL 1 DAY); 
+0

SELECT * FROM RECORD_DATA WHERE 'creationDate'> = Date() - 1 и' creationDate' Shin

ответ

15

довольно просто, когда сделано с SQL, просто добавить условие

WHERE creationDate BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE() 

Там нет необходимости конвертировать CreationDate, как это уже дата :). И я верю, что это будет самый быстрый способ проверить его (что будет иметь значение, если вы перейдете на большие массивы данных).

+1

Большое спасибо. Отлично работает. – user001

2

Я думаю, что это нужно сделать, это:

SELECT * FROM RECORD_DATA WHERE `creationDate` >= CURDATE()-1 and `creationDate` < CURDATE(); 
+0

Функция 'DATE()' преобразует DateTime в Date. Он ничего не делает по своему усмотрению. Вы, вероятно, хотели 'CURDATE()'. – Richard

+0

А я работал из памяти, обновлял свой ответ! – JMK

2

Это будет использовать INDEX на creationDate (если есть).

SELECT * 
FROM TableName 
WHERE creationDate >= CURDATE() - INTERVAL 1 DAY AND 
     creationDate < CURDATE() 
+3

Правильно. Но почему бы не использовать МЕЖДУ? – PeteGO

0

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

SELECT * 
FROM `tableName` 
WHERE DAY(created) = DAY(CURRENT_DATE - INTERVAL 1 DAY) 
+0

ДЕНЬ - это псевдоним DAYOFMONTH. ДЕНЬ ('2016-02-01') = ДЕНЬ ('2016-03-01') = ДЕНЬ ('2016-04-01') и т. Д. Https://dev.mysql.com/doc/refman/5.5 /en/date-and-time-functions.html#function_dayofmonth – baiano

Смежные вопросы