ВЫБЕРИТЕ все записи, которым 30 дней - PullRequest
1 голос
/ 02 февраля 2012

Мне нужно выбрать все записи, которым 30 дней. У меня есть код ниже, но он не работает. В updatestatus у меня есть даты, такие как 26.12.2011. Я создаю 30-дневную дату вроде

$onemonthago="01/01/2012";
$sth = $dbh->prepare(qq(
        SELECT * 
        FROM people 
        WHERE STR_TO_DATE (updatestatus,'%m/%d/%y') 
              <= STR_TO_DATE ( "$onemonthago",'%m/%d/%Y')
                    )  );

Ответы [ 4 ]

7 голосов
/ 02 февраля 2012

Если тип данных updatestatus равен date:

SELECT * 
FROM people 
WHERE updatestatus <= '2012-01-01'

или:

SELECT * 
FROM people 
WHERE updatestatus <= CURRENT_DATE() - INTERVAL 1 MONTH

Если тип данных datetime или timestamp иВы также хотите проверить часть времени:

SELECT * 
FROM people 
WHERE updatestatus <= NOW() - INTERVAL 1 MONTH

Вы можете указать точное время и дату вместо NOW() - INTERVAL 1 MONTH.Правильный путь зависит от того, как вы храните дату и время (временные коды создаются в Perl или MySQL?).

Вы также можете поместить - INTERVAL 30 DAY, что даст несколько другие результаты.

6 голосов
/ 15 апреля 2012

Это то, что я использовал.Очень просто

$sth = $dbh->prepare(qq(SELECT * FROM people WHERE updatestatus + INTERVAL 30 DAY <=     NOW() )) or die $DBI::errstr;
2 голосов
/ 02 февраля 2012

Вы можете попробовать это так.В SQL есть функция dateadd, и я думаю, что в MySQL должна быть похожая функция.

select *
from Table
where str_to_date between dateadd(day,-30,getdate()) and getdate()

Она извлекает записи между текущей датой и прошедшими 30 днями.Вам нужно скорректировать время.Если вы не считаете время, вам нужно удалить метку времени.

1 голос
/ 16 июля 2018

Если столбец времени указан в метке времени, используйте запрос ниже (используйте функцию from_unixtime)

SELECT wd.* FROM `watchdog` as wd
WHERE  from_unixtime(wd.timestamp) <= NOW() - INTERVAL 1 MONTH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...