Oracle SQL: 替换所有非数字值,例如 NULL、空白或空字符串
Oracle SQL: Replace all non-numeric values, such as NULL, blank or empty strings
我有一个格式为数字的列,但似乎也包含一些其他值,这些值导致我的其他函数(Rtrim、Xmlagg、Xmlelement、Extract)出现问题,导致整个查询失败(有效好吧,如果我把这个专栏去掉的话)。
谁能告诉我用 0(或者像 99999 这样的占位符数字)替换列中任何无效数字的最佳方法?
我尝试了以下方法,但我猜这只涵盖了 NULL 值,而不是 空字符串或空白字符串,我想我必须替换它们第一的。
TO_CHAR(NVL(a.mycolumn, 0))
非常感谢,
麦克
在 Oracle 中,您应该可以使用 TRIM()
:
NVL(TRIM(a.mycolumn), '0')
Oracle(默认情况下)将空字符串视为 NULL
。
请注意,这将 trim 结果,即使它不是 NULL
。如果这是不可取的,请使用 CASE
:
(CASE WHEN TRIM(a.mycolumn) IS NULL THEN '0' ELSE a.myolumn END)
使用REGEXP_LIKE
对于数字:
REGEXP_LIKE (numeric_value, '^\d+(\.\d+)?$')
或为空
REGEXP_LIKE(NVL(value, 'NULL'), '^\d+(\.\d+)?$|NULL$')
我有一个格式为数字的列,但似乎也包含一些其他值,这些值导致我的其他函数(Rtrim、Xmlagg、Xmlelement、Extract)出现问题,导致整个查询失败(有效好吧,如果我把这个专栏去掉的话)。
谁能告诉我用 0(或者像 99999 这样的占位符数字)替换列中任何无效数字的最佳方法?
我尝试了以下方法,但我猜这只涵盖了 NULL 值,而不是 空字符串或空白字符串,我想我必须替换它们第一的。
TO_CHAR(NVL(a.mycolumn, 0))
非常感谢,
麦克
在 Oracle 中,您应该可以使用 TRIM()
:
NVL(TRIM(a.mycolumn), '0')
Oracle(默认情况下)将空字符串视为 NULL
。
请注意,这将 trim 结果,即使它不是 NULL
。如果这是不可取的,请使用 CASE
:
(CASE WHEN TRIM(a.mycolumn) IS NULL THEN '0' ELSE a.myolumn END)
使用REGEXP_LIKE
对于数字:
REGEXP_LIKE (numeric_value, '^\d+(\.\d+)?$')
或为空
REGEXP_LIKE(NVL(value, 'NULL'), '^\d+(\.\d+)?$|NULL$')