Oracle регулярное выражение, чтобы перечислить уникальные символы различия между двумя строками - PullRequest
3 голосов
/ 12 сентября 2009

В Oracle 10g я хотел бы создать регулярное выражение для перечисления символов, которые отличается между двумя строками.

Вот причина: У меня есть таблица с полем, которое иногда содержит символы Unicode, которые не на французском языке.

Я могу перечислить строки, содержащие эти нестандартные символы, чтобы сделать будущее очистка с помощью этого запроса:

SELECT DataID, Name, CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC')  
  FROM table
  WHERE NAME <> CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC' )

где WE8ISO8859P1 - западноевропейский (что я принимаю)

и WE8DEC - 8-битные наборы символов от Digital Equipment Corporation (я знаю, что приложение поддерживает)

Я полагаю, что с помощью регулярного выражения Oracle я смог бы извлечь список всех этих нестандартных символов. Но я не знаком с regexp в Oracle, поэтому любая помощь будет оценена.

Вот моя (не работающая) идея:

select regexp_replace("éaé", '[a-z][A-Z]', '' ) from dual;

выдаст "é" как символ для очистки.

Ответы [ 3 ]

3 голосов
/ 12 сентября 2009

Возможно, что-то подобное может привести вас в правильном направлении:

SQL> select regexp_replace('éaéABcdEF', '([a-zA-Z])', '' ) problems from dual;

PROBLEMS
--------
éé

Он дает вам каждое вхождение символов, которые вы хотите идентифицировать, но, возможно, это не проблема, или вы можете уточнить это ...

0 голосов
/ 28 июня 2017
SELECT LISTAGG( letter, '' ) WITHIN GROUP(ORDER BY letter) 
       FROM ( SELECT DISTINCT substr( 'aaaaabcde', level, 1 ) letter 
                     FROM dual CONNECT BY level <= length('aaaaabcde') )
0 голосов
/ 12 сентября 2009

Я думаю, что вашей единственной ошибкой было использование двойных кавычек для первого параметра в вашем вопросе. Обычно двойные кавычки используются только для имен столбцов / таблиц.

Из-за добавленных DCookie регулярное выражение повторяется несколько раз. В зависимости от того, что находится в поле имени, вам может понадобиться добавить больше символов в предложение замены, включая пунктуацию (используйте две одинарные кавычки, чтобы соответствовать кавычке). Вот вам начало:

SELECT regexp_replace(name, '([a-zA-Z ,.;''"])\-?','') problem_characters , count(*) 
FROM table
  WHERE NAME <> CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC' )
group by regexp_replace(name, '([a-zA-Z ,.;''"])\-?','');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...