Получение данных из столбца, только если он содержит цифры или специальные символы в Oracle - PullRequest
2 голосов
/ 05 марта 2020

Я хочу данные из столбца, только если он содержит специальные символы или цифры. Мой запрос выглядит следующим образом:

Select First_name from account where regexp_like(First_name,'[0-9]')

Но я не знаю, как добиться этого специального символа

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Что ж, вы уже прошли большую часть пути, просто добавьте интересующие вас специальные символы в класс символов, который вы уже определили в регулярном выражении:

Select First_name
  from account
 where regexp_like(First_name,'[0-9@#$_!?*]')

Чтобы также выбрать записи, где First_name имеет значение null, используйте один из двух следующих запросов:

Select First_name
  from account
 where regexp_like(First_name,'[0-9@#$_!?*]')
    or First_name is null

или

Select First_name
  from account
 where regexp_like(nvl(First_name,'!'),'[0-9@#$_!?*]')

Первый явно выбирает строки, где First_name имеет значение NULL, а второй запрос получает его, подставляя специальный символьная строка для нулевых строк.

0 голосов
/ 05 марта 2020

Как насчет перевернутого подхода? Выберите значения, которые не все буквы . Как? Удалить их из строки! Примерно так:

SQL> with account (id, first_name) as
  2    (select 1, 'Little'     from dual union all   -- valid
  3     select 2, 'der Leyen'  from dual union all   -- valid
  4     select 3, 'F00t'       from dual union all   -- invalid; two zeros
  5     select 4, 'Sco#tt'     from dual union all   -- invalid; #
  6     select 5, 'Me@SO'      from dual union all   -- invalid; @
  7     select 6, 'What_is_it' from dual union all   -- invalid; _
  8     select 7, '12.345'     from dual union all   -- invalid; digits
  9     select 8, 'Huh? Whoa!' from dual             -- invalid; ?!
 10    )
 11  select id,
 12    first_name,
 13    regexp_replace(first_name, '[[:alpha:] ]', null) repl
 14  from account
 15  where regexp_replace(first_name, '[[:alpha:] ]', null) is not null
 16  order by id;

        ID FIRST_NAME REPL
---------- ---------- ----------
         3 F00t       00
         4 Sco#tt     #
         5 Me@SO      @
         6 What_is_it __
         7 12.345     12.345
         8 Huh? Whoa! ?!

6 rows selected.

SQL>

Столбец REPL здесь, чтобы показать, что осталось после замены букв (и пробела) на null ; вы бы обычно его не отображали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...