3

我有一张如下表;

caravan_id, description, date_purchased, special_instructions, health&safety_check, notes

health&safety_check是一个日期字段。

如何对该表中的数据执行 SQL 查询,以返回所有health&safety_check超过 12 个月的行。但如果可能的话,基于 12 个月,而不是今天的日期,例如 < 2011 年 10 月 12 日

4

3 回答 3

7
select *
from t
where "health&safety_check" < add_months(sysdate, -12)
于 2012-12-12T05:52:11.927 回答
6

就像是:

select *
from t
where add_months("health&safety_check", 12) < sysdate

我假设您不想对当前日期进行硬编码,但对使用变量感到满意。

Jeff 在评论中提出了一个很好的观点(尽管在 Oracle 中,您可以在函数上创建索引,以便解决问题)。这很容易解决:

where "health&safety_check" <add_months(sysdate, -12)
于 2012-12-10T18:45:13.673 回答
0

您可以使用此查询:

SELECT *
FROM table_name
WHERE `health&safety_check` < ADDDATE(NOW(), INTERVAL -12 MONTH)

ADDDATE(NOW(), INTERVAL -12 MONTH) 表示该日期减去 12 个月,您可以使用其他日期字段或变量来更改 NOW()。

NOW() 表示今天。

于 2012-12-11T03:05:32.683 回答