我有一个joomla网站,我想做一个查询,它可以每天用cronjob运行。它会查找30天前的任何文章,并在特定日期删除文章。
我可以这样做一个简单的查询:
SELECT * FROM `ibps6_content`
WHERE created > '2013-10-16' AND created < '2013-10-16'
但我不知道如何指定过去30天,而不是硬编码日期。
答案 0 :(得分:0)
哪个rdbms?
在oracle中,您可以使用基于sysdate
的select来表示当前日期/时间。
示例:
select * from ibps6_content WHERE created between sysdate - 30 and sysdate
答案 1 :(得分:0)
在T-SQL中,您可以使用以下内容:
SELECT
*
FROM
ibps6_content
WHERE
created BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
请注意,这将为您提供在您运行文章的特定时间内撰写的文章。要删除时间并仅使用日期,您可以使用:
DECLARE @CurDate DATETIME;
SET @CurDate = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()));
SELECT
*
FROM
ibps6_content
WHERE
created BETWEEN DATEADD(DAY, -30, @CurDate) AND @CurDate
答案 2 :(得分:0)
如果创建的是表中的日期数据类型
DELETE FROM ibps6_content WHERE created = CURRENT_DATE -INTERVAL 30 DAY
如果它的日期时间使用DATE(已创建)
答案 3 :(得分:-2)
您需要mysql DATE_FORMAT(date,format)功能。
请尝试将您的查询设置为:
DELETE FROM `ibps6_content` WHERE created > DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-%d');
希望这有帮助