在Oracle 12c中查找日期范围内的所有记录
问题描述:
我不确定为什么我的语法无法正常工作,但我正在查找Pend_Start_Dt字段比我的变量PndStDt大且Pend_End_Date小于我的所有记录变量PndEnDt。如果记录没有当前结束日期,则只要开始日期介于用户输入的开始日期和结束日期之间,它也应该取消。在Oracle 12c中查找日期范围内的所有记录
所以,基本上,有2种情况,其中记录应包括:
起始日期字段大于或等于用户输入和结束日期字段小于或等于起始日期到结束日期,用户输入
或
开始日期字段是用户输入和结束日期字段为空的开始日期和结束日期之间。
我希望这不是太混乱。
我试过的语法如下,但是我的存储过程不能编译。
Where a.Audit_Status = '3'
AND ((a.Pend_Start_DT >= TO_DATE (PndStDt, 'yyyy/mm/dd')) AND (a.Pend_End_DT <= (PndEnDT, 'yyyy/mm/dd'))
OR ((a.Pend_Start_DT between TO_DATE (PndStDt, 'yyyy/mm/dd') and TO_DATE (PndEnDT, 'yyyy/mm/dd') AND a.Pend_End_DT is null));
答
有一个失踪TO_DATE
和括号不是在正确的位置:
WHERE a.Audit_Status = '3'
AND
(
(a.Pend_Start_DT >= To_Date(PndStDt, 'yyyy/mm/dd')
AND a.Pend_End_DT <= To_Date(PndEnDT, 'yyyy/mm/dd')
)
OR
(a.Pend_Start_DT BETWEEN To_Date(PndStDt, 'yyyy/mm/dd')
AND To_Date(PndEnDT, 'yyyy/mm/dd')
AND a.Pend_End_DT IS NULL
)
)
什么是编译错误? –
在第二种情况下,如果结束日期为空,那么您是否只需要使用'Pend_Start_DT
它返回的错误是“此操作员必须跟随任何或全部”。如果我把它简化成它,它可以工作,但它在返回时不准确:AND(a.Pend_Start_DT> = PndStDt和a.Pend_Start_DT