作为报告的一部分,我在select语句中编写了包含15个子查询的代码以获取详细信息。当我执行这15列的总和时,我收到无效的Value Error。我的猜测是该列之一可能包含特殊字符。
因此,我正在使用条件NOT REGEXP_LIKE(Column_name,'\d')
来获取具有特殊字符的行。由于有15列,因此我需要帮助来检查一次中所有列的情况。
WHRER NOT REGEXP_LIKE(Column_name,'\d')
应提供任何列中都有特殊字符的行。
答案 0 :(得分:1)
使用OR
:
WHERE REGEXP_LIKE(col1,'\D')
OR REGEXP_LIKE(col2,'\D')
...
OR REGEXP_LIKE(col15,'\D')
或合并数据:
WHERE REGEXP_LIKE(col1||col2||...||col15,'\D')
您必须检查非数字值,因此\ D而不是\ d,因为REGEXP_LIKE(col1,'\d')
对于包含至少一位数字的任何字符串(例如,A54
)返回true。
答案 1 :(得分:0)
如果对字符串值进行算术运算,我会说您的查询或数据模型有问题。听起来像个问题。
但是要回答您的问题。此条件表达式:
WHERE REGEXP_LIKE(Column_name, '\d')
当列中至少包含一位数字字符时,返回true。
WHERE NOT REGEXP_LIKE(Column_name, '\d')
当该列没有数字时返回true。
我认为您想要检测数字的逻辑实际上是:
WHERE REGEXP_LIKE(Column_name, '^\d+$')
我建议对每一列分别执行以下逻辑:
WHERE REGEXP_LIKE(Col1, '^\d+$') AND
REGEXP_LIKE(Col2, '^\d+$') AND
. . .
这适用于个数字,但不能处理负号,小数点或NULL
值。
出于数字的特定目的,您可以串联以下列:
WHERE REGEXP_LIKE(Col1 || Col2 || . . ., '^\d+$')