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

Oracle SQL:替换所有非数值,如NULL、空白或空字符串,sql,oracle,select,replace,trim,Sql,Oracle,Select,Replace,Trim,我有一个列的格式是number,但似乎还包含一些其他值,这些值给我的其他函数(Rtrim、Xmlagg、xmlement、Extract)带来了麻烦,导致整个查询失败(如果我去掉这一列,效果会很好) 有人能告诉我用0(或者像99999这样的占位符数字)替换列中无效数字的最佳方法吗 我尝试了以下方法,但我想这只包括空值,而不是空字符串或空字符串,我想我必须首先替换它们 TO_CHAR(NVL(a.mycolumn, 0)) 非常感谢, Mike在Oracle中,您应该能够使用TRIM(): Or

我有一个列的格式是number,但似乎还包含一些其他值,这些值给我的其他函数(Rtrim、Xmlagg、xmlement、Extract)带来了麻烦,导致整个查询失败(如果我去掉这一列,效果会很好)

有人能告诉我用0(或者像99999这样的占位符数字)替换列中无效数字的最佳方法吗

我尝试了以下方法,但我想这只包括空值,而不是空字符串或空字符串,我想我必须首先替换它们

TO_CHAR(NVL(a.mycolumn, 0))
非常感谢,

Mike

在Oracle中,您应该能够使用
TRIM()

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

请注意,这将修剪结果,即使它不是
NULL
。如果不需要,请使用
案例

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

使用类似于REGEXP的
REGEXP\u

对于数字:

REGEXP_LIKE (numeric_value, '^\d+(\.\d+)?$')
或使用null

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

这太完美了。非常感谢你的快速帮助,戈登!
REGEXP_LIKE(NVL(value, 'NULL'), '^\d+(\.\d+)?$|NULL$')