我有一個查詢作爲一個較大的功能的一部分,並有麻煩使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
不起作用。任何想法/幫助解決這個問題,表示讚賞。
編輯 添加一些樣本數據表明:
datRunDate 2016-01-14 06:41:54
EFFECTIVE_DATE 2013-04-01 09:53:00
STOP_DATE NULL
EDIT2 這裏添加整個查詢文本,問題可能就出在這裏。注意:我已經手動替換了這些變量。使用簡單的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
DESC SCHEDULES
COMP_DATE = datRunDate
SELECT I.IDL_SEQ
FROM IDLS I, IDL_CMPS IC
WHERE I.RECORD_TYPE = 'M'
AND IC.IDL_SEQ = I.IDL_SEQ
AND IC.CMP = '71-43-2'
AND I.METHOD = 'N0'
AND ((I.RUN_INSTRU = '') OR (I.RUN_INSTRU IS NULL))
AND ((I.PREP_METHOD = 'K9') OR (I.PREP_METHOD IS NULL))
AND ((I.MATRIX = 'SO') OR (I.MATRIX IS NULL))
AND ((I.COLUMN_ID = '') OR (I.COLUMN_ID IS NULL))
AND COALESCE(datRunDate, SYSDATE)
BETWEEN COALESCE(I.EFFECTIVE_DATE, datRunDate, SYSDATE - 1)
AND COALESCE(I.STOP_DATE + (59/86400), datRunDate, SYSDATE + 1)
AND ((I.SAMPLE_TYPE = 'SAMPLE') OR (SAMPLE_TYPE IS NULL))
AND ((I.CUST_SAMPLE_ID = 'SB-7') OR (CUST_SAMPLE_ID IS NULL))
AND ((I.LOCATION = '') OR (LOCATION IS NULL))
AND (
(OTHER_CRITERIA IS NOT NULL AND 404324 IS NOT NULL AND OTHER_CRITERIA = 'P|'||404324) OR
(OTHER_CRITERIA IS NOT NULL AND 28936 IS NOT NULL AND OTHER_CRITERIA = 'R|'||28936) OR
(OTHER_CRITERIA IS NOT NULL AND 'ECO' IS NOT NULL AND OTHER_CRITERIA = 'C|'||'ECO') OR
(OTHER_CRITERIA IS NULL));
現在,當我運行此我得到:ORA-00932:不一致的數據類型:預期CHAR了DATE
您確定您的日期字段中沒有「默認」值嗎?即使空日期,解碼似乎也能正常工作;例如,這會給出sysdate:'雙重'select decode(null,null,sysdate,sysdate-100)' – Aleksej
'datRunDate'和'EFFECTIVE_DATE'中的所有值都是日期。 –
他們是日期,好的,但有可能你有,例如,01/01/0001而不是null? – Aleksej