我有一个查询作为一个更大的函数的一部分,并且无法使ListBox
使用null日期。我的查询的这部分位于查询的DECODE
条件中:
WHERE
其中:
NVL(datRunDate,SYSDATE)
BETWEEN NVL(EFFECTIVE_DATE,NVL(datRunDate,SYSDATE-1))
AND DECODE(STOP_DATE, NULL, NVL(datRunDate,SYSDATE + 1), STOP_DATE + (59/86400))
我的问题是,datRunDate DATE
EFFECTIVE_DATE DATE
STOP_DATE DATE
通常是STOP_DATE
而NULL
不起作用。任何想法/帮助解决这个问题是值得赞赏的。
修改 按建议添加一些样本数据:
DECODE
EDIT2
在这里添加整个查询文本可能就在这里。注意:我已手动替换变量。这些变量在此查询之前使用简单的datRunDate 2016-01-14 06:41:54
EFFECTIVE_DATE 2013-04-01 09:53:00
STOP_DATE NULL
语句填充。
SELECT INTO
datRunDate DATE;
SELECT COMP_DATE INTO datRunDate where IDL_SEQ = 2320;
SELECT EFFECTIVE_DATE, STOP_DATE from IDLS where IDL_SEQ = 2320;
DESC IDL_TABLE
COMP_DATE = datRunDate
DESC SCHEDULES
现在当我运行这个时,我得到:ORA-00932:不一致的数据类型:预期CHAR得到DATE
答案 0 :(得分:1)
我会把它写成:
COALESCE(datRunDate, SYSDATE) BETWEEN COALESCE(EFFECTIVE_DATE, datRunDate, SYSDATE - 1) AND
COALESCE(STOP_DATE + (59/86400), dateRunDate, SYSDATE + 1)
ANSI标准函数COALESCE()
比使用NVL()
和DECODE()
更简单(无论如何都应该废弃)。