从未填充的表中选择 - IS NULL不起作用

问题描述:

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

没有人回答这个问题,所以我想为任何可能有类似问题的人提供答案。 该字段是“非空”,所以我必须做一个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