2017-07-09 4 views
2

J'ai une colonne formatée en nombre mais qui semble contenir d'autres valeurs qui causent des problèmes avec mes autres fonctions (Rtrim, Xmlagg, Xmlelement, Extract), ce qui conduit l'ensemble de la requête à échouer (ce qui fonctionne bien si je supprime cette colonne).Oracle SQL: Remplacer toutes les valeurs non numériques, telles que les chaînes vides, vides ou vides

Quelqu'un peut-il me dire la meilleure façon de remplacer n'importe quoi dans une colonne qui n'est pas un nombre valide par 0 (ou alternativement un nombre de placeholder comme 99999)?

J'ai essayé le suivant mais devinez ce qui ne couvre valeurs NULL, pas chaînes vides ou des chaînes vides que je pense que je dois remplacer le premier.

TO_CHAR(NVL(a.mycolumn, 0)) 

Un grand merci à l'avance,
Mike

Répondre

3

Dans Oracle, vous devriez être en mesure d'utiliser TRIM():

NVL(TRIM(a.mycolumn), '0') 

Oracle (par défaut) traite des chaînes vides comme NULL. Notez que cela va couper le résultat, même si ce n'est pas NULL. Si ce n'est pas souhaitable, utiliser CASE:

(CASE WHEN TRIM(a.mycolumn) IS NULL THEN '0' ELSE a.myolumn END) 
+0

C'est parfait. Merci beaucoup pour l'aide rapide, Gordon! – Mike

3

Utilisez REGEXP_LIKE

Pour Numérique:

REGEXP_LIKE (numeric_value, '^\d+(\.\d+)?$') 

ou null

REGEXP_LIKE(NVL(value, 'NULL'), '^\d+(\.\d+)?$|NULL$')