使用日期函数进行查询

时间:2012-11-11 07:32:27

标签: oracle plsql date-arithmetic

我有下表

警报(AlarmID INT,InstalledDate Date)

鉴于警报需要每5年更换一次,我如何在接下来的6个月内显示所有需要更换的警报?

我尝试了以下内容并且没有结果:

SELECT AlarmID
FROM   Alarm
WHERE  Add_months(InstalledDate, 60)
BETWEEN SYSDATE AND Add_months(SYSDATE, 6);

1 个答案:

答案 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运算符转换为ltgt语句来更清楚:

where date '2012-03-01' >= date '2012-01-01'  
and   date '2012-03-01' <= date '2012-06-01'

如果交换第二个和第三个表达式的值,您将看到反转顺序返回false的原因。