2015-04-13 3 views
0

Выбор первого и последнего имени со средним начальным, если он есть, но мне также нужно выбрать значение null, если весь литерал пуст. Текущий код возвращает пробелы, если литерал пуст, и это вызывает выбор из представления.Возвращает null, если литерал пуст.

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

Это взято из выпадающего списка, и все работает, за исключением, когда весь буквальный выбор пуст, то он возвращается пространства вместо NULL. С помощью этого кода нет полей NULL, и должно быть несколько NULL.

Любая помощь или предложения оценены.

ответ

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" 
+0

Perfect !! большое спасибо – user761758

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 
Смежные вопросы