Как использовать REGEXP_LIKE для всех столбцов в таблицах? - PullRequest
0 голосов
/ 03 июля 2019

В своем отчете я написал код с 15 подзапросами в операторе select для извлечения деталей. Поскольку я выполняю сумму этих 15 столбцов, я получаю недопустимое значение ошибки. Я предположил, что один из столбцов может содержать специальный символ.

Поэтому я использую условие NOT REGEXP_LIKE(Column_name,'\d'), чтобы получить строки, содержащие специальные символы. Поскольку имеется 15 столбцов, я хочу помочь проверить это условие для всех столбцов в одном кадре.

WHRER NOT REGEXP_LIKE(Column_name,'\d')

Должен давать строки, в которых есть специальные символы в любом столбце.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Используйте 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') возвращает true для любой строки, которая содержит хотя бы одну цифру (например, A54).

0 голосов
/ 03 июля 2019

Я бы сказал, что у вас есть проблема с вашим запросом или моделью данных, если вы выполняете арифметику со строковыми значениями. Это звучит как проблема.

Но чтобы ответить на ваш вопрос. Это условное выражение:

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+$')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...