2017-07-09 20 views
2

数値として書式設定されている他の値も含まれているようですが、他の関数(Rtrim、 Xmlagg、Xmlelement、Extract)、全体のクエリーを失敗させます(これは、このカラムを取り出すとうまくいきます)。Oracle SQL:NULL、空白または空文字列などのすべての非数値値を置換します。

有効な数字ではない列の何かを0(または99999のようなプレースホルダ番号)で置き換える最善の方法を教えてもらえますか?

私は次のことを試してみましたが、これが唯一のNULLが、ない空の文字列または私は私が最初に交換する必要があると思うの空白文字列を値網羅思います。

TO_CHAR(NVL(a.mycolumn, 0)) 

事前に多くのおかげで、オラクルで
マイク

答えて

3

は、あなたがTRIM()を使用することができるはずです。

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

オラクル(デフォルトでは)NULLとして空の文字列を扱います。

NULLでなくても結果がトリミングされることに注意してください。それが望ましくない場合、CASEを使用します。

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

これは完璧です。クイックヘルプ、ゴードンに感謝します! – Mike

3

使用REGEXP_LIKE

を数値について:

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

またはnull

REGEXP_LIKE(NVL(value, 'NULL'), '^\d+(\.\d+)?$|NULL$') 
関連する問題