Oracle解码null日期变量

时间:2016-08-17 12:47:05

标签: oracle

我有一个查询作为一个更大的函数的一部分,并且无法使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_DATENULL不起作用。任何想法/帮助解决这个问题是值得赞赏的。

修改 按建议添加一些样本数据:

DECODE

EDIT2 在这里添加整个查询文本可能就在这里。注意:我已手动替换变量。这些变量在此查询之前使用简单的datRunDate 2016-01-14 06:41:54 EFFECTIVE_DATE 2013-04-01 09:53:00 STOP_DATE NULL 语句填充。

SELECT INTO

enter image description here

enter image description here

datRunDate      DATE;   

SELECT COMP_DATE INTO datRunDate where IDL_SEQ = 2320;

enter image description here

enter image description here

SELECT EFFECTIVE_DATE, STOP_DATE from IDLS where IDL_SEQ = 2320;

enter image description here

DESC IDL_TABLE COMP_DATE = datRunDate

enter image description here ...

DESC SCHEDULES

现在当我运行这个时,我得到:ORA-00932:不一致的数据类型:预期CHAR得到DATE

1 个答案:

答案 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()更简单(无论如何都应该废弃)。