我有下表
警报(AlarmID INT,InstalledDate Date)
鉴于警报需要每5年更换一次,我如何在接下来的6个月内显示所有需要更换的警报?
我尝试了以下内容并且没有结果:
SELECT AlarmID
FROM Alarm
WHERE Add_months(InstalledDate, 60)
BETWEEN SYSDATE AND Add_months(SYSDATE, 6);
答案 0 :(得分:1)
“我尝试了以下内容并且没有结果:”
您提出的查询看起来是正确的,所以也许您没有任何五年的警报?
“使用BETWEEN SYSDATE AND似乎有区别 Add_months(SYSDATE,6)与BETWEEN Add_months(SYSDATE,6)AND比较 SYSDATE;“
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'
也许这似乎不公平,但the Oracle documentation通过将BETWEEN运算符转换为lt
和gt
语句来更清楚:
where date '2012-03-01' >= date '2012-01-01'
and date '2012-03-01' <= date '2012-06-01'
如果交换第二个和第三个表达式的值,您将看到反转顺序返回false的原因。