如何对表中的所有列使用REGEXP_LIKE?

时间:2019-07-03 08:32:46

标签: sql regex oracle

作为报告的一部分,我在select语句中编写了包含15个子查询的代码以获取详细信息。当我执行这15列的总和时,我收到无效的Value Error。我的猜测是该列之一可能包含特殊字符。

因此,我正在使用条件NOT REGEXP_LIKE(Column_name,'\d')来获取具有特殊字符的行。由于有15列,因此我需要帮助来检查一次中所有列的情况。

WHRER NOT REGEXP_LIKE(Column_name,'\d')

应提供任何列中都有特殊字符的行。

2 个答案:

答案 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+$')