как вы констатируете значение внутри nvl условия? - PullRequest
1 голос
/ 22 апреля 2020

У меня есть запрос, который имеет

nvl(emp_num,persion_id) as employee_number 

, но теперь я хочу создать новый лог c, чтобы объединить e или p на основе выбранного значения, чтобы быть похожим на это

nvl('E_'||emp_num,'P_'||persion_id)

как этого добиться?

Ответы [ 4 ]

1 голос
/ 22 апреля 2020

Ваша проблема в том, что, объединяя E_ в значение emp_num, вы предотвращаете его замену на persion_id, поскольку проверяемое вами значение больше не будет NULL. Вы можете обойти это с помощью выражения CASE:

SELECT CASE WHEN emp_num IS NULL THEN 'P_' || persion_id 
            ELSE 'E_'||emp_num 
       END AS employee_number

Демонстрация на dbfiddle

0 голосов
/ 22 апреля 2020

Вы можете использовать декодирование также для достижения, как показано ниже

 decode('E_'||emp_num,'E_','P_' || persion_id,'E_'||emp_num)
0 голосов
/ 22 апреля 2020

Это один из тех случаев, когда возврат 10000 * с || бесполезен.

Хотя вы можете использовать nvl2(), я рекомендую case, потому что это стандартный SQL:

(case when emp_num is not null then 'E_' || emp_num else 'P_' || person_id end)
0 голосов
/ 22 апреля 2020

Используйте NVL2 или CASE WHEN:

nvl2(emp_num, 'E_' || emp_num, 'P_' || persion_id)

case when emp_num is not null then 'E_' || emp_num else 'P_' || persion_id end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...