Oracle SQL:替换所有非数字值,例如NULL,空格或空字符串

时间:2017-07-09 13:29:53

标签: sql oracle select replace trim

我有一个格式化为数字的列,但似乎包含一些其他值,这些值导致我的其他函数(Rtrim,Xmlagg,Xmlelement,Extract)出现问题,导致整个查询失败(如果我把这个专栏拿出来了)。

有人能告诉我将有效数字中的任何内容替换为0的最佳方法(或者像99999这样的占位符号)吗?

我尝试了以下操作但猜测这只包括空值,而不是空字符串或空字符串,我认为我必须先替换它。

TO_CHAR(NVL(a.mycolumn, 0))

非常感谢提前,
麦克

2 个答案:

答案 0 :(得分:3)

在Oracle中,您应该可以使用TRIM()

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

Oracle(默认情况下)将空字符串视为NULL

请注意,这会修剪结果,即使它不是NULL。如果不合适,请使用CASE

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

答案 1 :(得分:3)

使用REGEXP_LIKE

对于数字:

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

或null

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