#oracle
#Oracle
Вопрос:
у oracle есть хорошая встроенная функция для выполнения if null, однако я хочу сделать if = 0; есть ли простой способ сделать это?
nvl(instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,’корп’) 5),’ ‘), длина(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,’bldg’) 5))))
Это передается в качестве параметра функции substr.
Если instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg') 5),' ')
равно != 0
, то я хочу это значение, в противном случае я хочу значение length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg') 5))
есть ли простой способ сделать это?
Ответ №1:
Вы можете использовать NVL(NULLIF(A,'0'), B)
Ответ №2:
Я обнаружил, что оба ответа трудно читать из-за дополнительной многословности из исходного сообщения. Обобщая ответы Конрада и Крейга:
Для репликации nvl(A, B), но для 0 вместо null, вы можете сделать:
WHEN A != 0 THEN
A
ELSE
B
END
или Craig более компактен (но его сложнее прочитать другим):
NVL(NULLIF(A,0),B)
Я думаю, что следующее также сработало бы:
DECODE(A,0,B,A)
Ответ №3:
Я думаю, вам нужно будет использовать РЕГИСТР
например
WHEN instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg') 5),' ') != 0 THEN
length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg') 5))
ELSE
Some Default
END as foo
Комментарии:
1. внутри вызова substring?
2.
case when instr(ovrflo_adrs_info,'bld') > 0 then substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld') 5, case when instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld') 5),' ') != 0 instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld') 5),' ') else length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bld') 5)))) end) else null end as BLDG_NM,
Ответ №4:
Технически вы могли бы сделать это с меньшим количеством ввода, поскольку:
nvl(
nullif(instr(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg') 5),' '),0),
length(substr(ovrflo_adrs_info,instr(ovrflo_adrs_info,'bldg') 5))
)
Тем не менее, я обычно встаю на сторону Conrad и советую вам использовать CASE, чтобы было легче определить, каково назначение кода для будущего обслуживания.
Комментарии:
1. Хотя мне нравится
nullif
функция. Я должен буду помнить об этом для будущего использования…