如果literal为空,则返回null

时间:2015-04-13 20:33:34

标签: sql oracle oracle11g

选择带有中间首字母的名字和姓氏,如果有的话,但如果整个文字是空的,我还需要选择null。如果文字为空,则当前代码返回空格,这会使视图中的选择变得混乱。

t1.first
      || ' '
      || NVL2 (t1.middle, t1.middle || ' ', NULL)
      || t1.last
         "SUPERVISOR"

这是从选择列表中获取的,除了当整个文字选择为空,然后返回空格而不是NULL时,一切正常。使用此代码,没有NULL字段,并且应该有一些NULL。

任何帮助或建议表示赞赏。

2 个答案:

答案 0 :(得分:1)

我想用一个case语句就行了。您可能需要调整条件,因为我不确定值是空值还是空字符串。

CASE 
WHEN t1.first is null and t1.last is null and t1.middle is null 
THEN null
ELSE t1.first
          || ' '
          || NVL2 (t1.middle, t1.middle || ' ', NULL)
          || t1.last end 
             "SUPERVISOR"

答案 1 :(得分:0)

只需将构建的字符串包装在对TRIM()的调用中,这将删除空白并返回NULL,如果那就是那里的那些。这里通过使用NVL来检测它是否为空并返回一个值来说明和证明:

with tbl as
(
  select 'first' firstname, 'M' middlename, 'Last' lastname from dual
  union
  select NULL firstname, NULL middlename, NULL lastname from dual
)  
select NVL(trim(firstname || ' ' || middlename || ' ' || lastname), 'NO NAME ENTERED') fullname from tbl;


FULLNAME       
---------------
first M Last   
NO NAME ENTERED