Почему я получаю неправильный номер из поля varchar, в котором я запускаю regexp_replace? - PullRequest
0 голосов
/ 27 сентября 2018
SELECT REGEXP_REPLACE (FIRST, '[^a-zA-Z0-9]+', '', 'g')
  FROM example
 WHERE LAST LIKE '%Belanger%'

'first' - это поле varchar2.Я просто пытаюсь удалить не алфавитно-цифровые символы из первого поля.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вам не нужно 'g' на этом месте.Следующего запроса достаточно.Проверьте это в документации, предоставленной @ kfinity

SELECT regexp_replace(first, '[^a-zA-Z0-9]+', '')
          FROM example
          where last LIKE '%Belanger%'
0 голосов
/ 27 сентября 2018

Попробуйте это (замените все, что не находится в диапазонах a-z или 0-9 на ноль, начиная с позиции 1, все вхождения, без учета регистра):

regexp_replace(first, '[^a-z0-9]+', '', 1, 0, 'i')

или это (замените что-либов POSIX [:alnum:] (буквенно-цифровой) класс символов ):

regexp_replace(first, '[^[:alnum:]]')
0 голосов
/ 27 сентября 2018

where last LIKE 'Belanger' возвращает только те строки, где last равно "Belanger".Добавьте соответствующие символы

WHERE last LIKE '%Belanger%'  -- contains 'Belanger'

или

WHERE last LIKE 'Belanger%'  -- starts with 'Belanger'

или

 WHERE last LIKE '%Belanger'  -- ends with 'Belanger'

или (без LIKE)

 WHERE last = 'Belanger'  -- equals 'Belanger'

Это также выглядит каксинтаксис для regexp_replace неверен.синтаксис:

REGEXP_REPLACE( string, pattern [, replacement_string [, start_position
                [, nth_appearance [, match_parameter ] ] ] ] )

Последний параметр - match_parameter, которому должны предшествовать start_position и nth_appearance.Допустимые параметры соответствия (согласно TechNet REGEXP_REPLACE Function ):

'c' Выполнить сопоставление с учетом регистра.
'i' Выполнить сопоставление без учета регистра.
'n' Позволяет символу точки (.) соответствовать символу новой строки.
По умолчанию точка является подстановочным знаком.
Предполагается, что выражение 'm' состоит из нескольких строк, где ^ - началоline и $ это конец
строки, независимо от положения этих символов в выражении.По умолчанию выражение считается одной строкой.
'x' Пробельные символы игнорируются.По умолчанию пробельные символы сопоставляются с любым другим
другим символом.

Однако это должно работать без этого параметра 'g' (независимо от того, что он должен был делать):

regexp_replace(first, '[^a-zA-Z0-9]+', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...