6
votes

Oracle si 0, comme si NULL (NVL)

Oracle a une belle fonction intégrée pour faire si NULL, mais je veux faire si = 0; Y a-t-il un moyen simple de faire cela?

NVL (INSTR (substr (OVRFLO_ADRS_INFO, INSTR (OVRFLO_ADRS_INFO, 'BLDG') + 5), ''), Longueur (substruisement (ovrflo_adrs_info, instrtr (ovrflo_adrs_info, 'bldg') + 5))))

Ceci va comme paramètre à une fonction substraire.

Si INSTR (substr (ovrflo_adrs_info, instr (OVRFLO_ADRS_INFO, 'BLDG') + 5), '') est ! = 0 alors je veux cette valeur, sinon Je souhaite la valeur de longueur (substr (ovrflo_adrs_info, instr (ivrflo_adrs_info, 'bldg') + 5))

Y a-t-il un moyen facile de faire cela?


0 commentaires

4 Réponses :


5
votes

Je pense que vous devez utiliser case

EG P >

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


2 commentaires

À l'intérieur de l'appel de sous-chaîne?


Case lorsque Instr (ovrflo_adrs_info, 'bld')> 0 Ensuite (ovrflo_adrs_info, Instr (ovrflo_adrs_info, (ovrflo_adrs_info, 'bld') + 5, cas lorsque INSTR (SUBSTR (OVRFLO_ADRS_INFO, "BLD") + 5), '')! = 0 Instr (substrub (ovrflo_adrs_info, instr (ovrflo_adrs_info, 'bld') + 5), '') Durée de la longueur (substrachal (ovrflo_adrs_info, 'bld') + 5))) Ouvert) Sinon Null Fin comme bldg_nm,



5
votes

Vous pouvez le faire techniquement avec moins de taper comme: xxx

Cependant, je serais typiquement côte avec Conrad et vous conseilleriez d'utiliser l'affaire afin qu'il soit plus facile de dire quelle est l'intention du code est pour la maintenance future.


1 commentaires

J'aime la fonction nullif cependant. Je vais devoir garder cela à l'esprit pour une utilisation future ...



7
votes

J'ai trouvé les deux réponses difficiles à lire à cause du verbiage supplémentaire du poste d'origine. Résumation des réponses de Conrad et Craig:

Pour reproduire NVL (A, B) mais pour 0 au lieu de NULL, vous pouvez faire: p>

DECODE(A,0,B,A)


0 commentaires

19
votes

Vous pouvez utiliser nvl (nullif (A, '0'), b)


0 commentaires