2014-09-12 75 views
0

SQL,Oracle - 我試圖從表中提取記錄,如果狀態='SO'或狀態爲空。 如果Status ='SO',那麼我只能夠檢索記錄,因爲如果它是Null,這意味着我從中拉出的地方沒有人口 - 沒有任何東西可供它查看。這幾乎就像要求某人告訴他們是否在書中找到一個空白頁面,但由於它是空白的,實際上沒有頁面可以看到,但該書仍然存在。如果頁面上有'SO',你可以找到它。從未填充的表中選擇 - IS NULL不起作用

DGMR_DEGS_CODE可以是PN,AW,SO,或空白(什麼都不存在)

Select distinct sp.sprite_id as "ID", SP.SPRITE_LAST_NAME as "Last", SP.SPRITE_FIRST_NAME as "First", 
sh.TRAN_REQUEST_DATE as "Request Date", 
NL.DGMR_DEGS_CODE as "Null Dgr", 
SV.RSTS_ENRL as "Enrolled?", 
sf.stcr_term_code as "Term", 
sysdate as "Current Date" 


from Sprite SP 

join TRAN SH 
on sp.sprite_pid = sh.tran_pid 

full outer join DGMR NL 
on NL.DGMR_pid = sp.sprite_pid 

join stcr sf 
on sp.sprite_pid = sf.stcr_pid 
JOIN stvrsts SV 
on SF.STCR_RSTS_CODE = SV.STVTS_CODE 

where 
Sp.sprite_change_ind is null 

and sh.TRAN_REQUEST_DATE between sysdate-1 and sysdate 
and (sf.stcr_term_code = '201401' or sf.stcr_term_code = '201402') 
AND SV.RSTS_ENRL = 'Y' 
AND (NL.DGMR_DEGS_CODE is null or NL.DGMR_DEGS_CODE = 'SO') 
--and (length(NL.DGMR_DEGS_CODE)=0 or NL.DGMR_DEGS_CODE = 'SO') 
--and NL.DGMR_DEGS_CODE <> 'PN' 
--and NL.DGMR_DEGS_CODE <> 'AW' 
--and NL.DGMR_DEGS_CODE <> 'PN' and NL.DGMR_DEGS_CODE <> 'AW' 

如果我不包括NL.DGMR_DEGS_CODE標準,它選擇25個記錄:這些記錄包括SO,AW, PN和NULL記錄!! 如果我包含標準,它不會拉空NULL記錄。詢問SO或Null只選擇SO記錄。

+0

你確定'dgmr_degs_code'實際上是NULL嗎?而不是說一個或多個空格字符?你發佈的代碼不是使用'IS NULL'--你問題的文本說你使用'IS NULL'來返回NULL值。你確定你實際上在你的代碼中使用了'IS NULL'嗎?如果是這樣,你可以編輯你的SQL語句以向我們展示你如何使用它? – 2014-09-12 21:51:20

+0

我道歉。上面的代碼不會顯示「爲空」,因爲我曾嘗試過,但它不起作用。我也試過''。這甚至是一件真實的事情嗎?要麼 '%' ? 之後是空和''和'%'沒有奏效,我試過(長度(NL.DGMR_DEGS_CODE)= 0或NL.DGMR_DEGS_CODE ='SO') – 2014-09-12 21:58:09

+0

什麼'dump(nl.dgmr_degs_code)'爲其中一個「空」行返回?這將顯示你確切地存儲在列中的內容。 – 2014-09-12 22:01:01

回答

0

沒有人回答這個問題,所以我想爲任何可能有類似問題的人提供答案。 該字段是「非空」,所以我必須做一個TRIM,以使其爲空。

我替換了最後一行。

where 
Sp.sprite_change_ind is null 
and sh.TRAN_REQUEST_DATE between sysdate-1 and sysdate 
and (sf.stcr_term_code = '201401' or sf.stcr_term_code = '201402') 
AND SV.RSTS_ENRL = 'Y' 
and trim(NL.DGMR_DEGS_CODE) is null