我有下表
警报(AlarmID INT,InstalledDate 日期)
鉴于警报器需要每 5 年更换一次,我如何显示在接下来的 6 个月内需要更换的所有警报器?
我尝试了以下方法,但没有结果:
SELECT AlarmID
FROM Alarm
WHERE Add_months(InstalledDate, 60)
BETWEEN SYSDATE AND Add_months(SYSDATE, 6);
我有下表
警报(AlarmID INT,InstalledDate 日期)
鉴于警报器需要每 5 年更换一次,我如何显示在接下来的 6 个月内需要更换的所有警报器?
我尝试了以下方法,但没有结果:
SELECT AlarmID
FROM Alarm
WHERE Add_months(InstalledDate, 60)
BETWEEN SYSDATE AND Add_months(SYSDATE, 6);
“我尝试了以下方法,但没有结果:”
您提出的查询看起来是正确的,所以也许您没有任何五年前的警报?
“与 BETWEEN Add_months(SYSDATE, 6) AND SYSDATE 相比,使用 BETWEEN SYSDATE AND Add_months(SYSDATE, 6) 似乎存在差异;”
BETWEEN 运算符要求我们以特定顺序传递两个值,下限然后上限。所以这个过滤器是真的:
where date '2012-03-01' between date '2012-01-01' and date '2012-06-01'
而这是错误的:
where date '2012-03-01' between date '2012-06-01' and date '2012-01-01'
也许这看起来不公平,但Oracle 文档lt
通过将 BETWEEN 运算符转换为andgt
语句使其更加清晰:
where date '2012-03-01' >= date '2012-01-01'
and date '2012-03-01' <= date '2012-06-01'
如果你交换第二个和第三个表达式的值,你就会明白为什么颠倒的顺序返回 false。