我有一张如下表;
caravan_id, description, date_purchased, special_instructions, health&safety_check, notes
health&safety_check
是一个日期字段。
如何对该表中的数据执行 SQL 查询,以返回所有health&safety_check
超过 12 个月的行。但如果可能的话,基于 12 个月,而不是今天的日期,例如 < 2011 年 10 月 12 日
select *
from t
where "health&safety_check" < add_months(sysdate, -12)
就像是:
select *
from t
where add_months("health&safety_check", 12) < sysdate
我假设您不想对当前日期进行硬编码,但对使用变量感到满意。
Jeff 在评论中提出了一个很好的观点(尽管在 Oracle 中,您可以在函数上创建索引,以便解决问题)。这很容易解决:
where "health&safety_check" <add_months(sysdate, -12)
您可以使用此查询:
SELECT *
FROM table_name
WHERE `health&safety_check` < ADDDATE(NOW(), INTERVAL -12 MONTH)
ADDDATE(NOW(), INTERVAL -12 MONTH) 表示该日期减去 12 个月,您可以使用其他日期字段或变量来更改 NOW()。
NOW() 表示今天。