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? P>
NVL (INSTR (substr (OVRFLO_ADRS_INFO, INSTR (OVRFLO_ADRS_INFO, 'BLDG') + 5), ''), Longueur (substruisement (ovrflo_adrs_info, instrtr (ovrflo_adrs_info, 'bldg') + 5)))) p> blockQuote>
Ceci va comme paramètre à une fonction substraire. P>
Si
INSTR (substr (ovrflo_adrs_info, instr (OVRFLO_ADRS_INFO, 'BLDG') + 5), '') code> est
! = 0 code> alors je veux cette valeur, sinon Je souhaite la valeur de
longueur (substr (ovrflo_adrs_info, instr (ivrflo_adrs_info, 'bldg') + 5)) code> p>
Y a-t-il un moyen facile de faire cela? P>
4 Réponses :
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
À 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, code>
Vous pouvez le faire techniquement avec moins de taper comme: 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. p> p>
J'aime la fonction nullif code> cependant. Je vais devoir garder cela à l'esprit pour une utilisation future ...
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)
Vous pouvez utiliser nvl (nullif (A, '0'), b) code> p>