Сопоставление регулярных выражений с Oracle

Я работаю над SQL Developer. Мне нужны только те записи, которые содержат нечисловые данные. Я использовал следующий запрос:

select * from  TBL_NAME where regexp_like (mapping_name,'%[!0-9]%');

Как ни странно, это не работает.

Пожалуйста, дайте использовать какие-то данные для работы? Какая исходная таблица, каков результат запроса «что вы хотите?»

H. Pauwelyn 17.04.2018 18:53

Символ процента не соответствует всем символам в синтаксисе регулярного выражения. И челка не означает НЕ. Прочтите о синтаксисе регулярных выражений, это целый отдельный язык, чтобы по-новому взглянуть на него!

Gary_W 17.04.2018 21:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
2
63
1

Ответы 1

Как насчет этого? Как вы сказали, возвращаемые значения НЕ являются числами.

SQL> with test (col) as
  2    (select 'abc123' from dual union
  3     select '12345'  from dual union
  4     select 'abc'    from dual union
  5     select '($ff3'  from dual union
  6     select '12.345' from dual
  7    )
  8  select col
  9  from test
 10  where not regexp_like (col, '^\d+|(\.\d+)$');

COL
------
($ff3
abc
abc123

SQL>

Если десятичных значений нет, регулярное выражение еще проще: '^\d+$'

[ИЗМЕНИТЬ, после того как были предоставлены образцы данных]

Кусок пирога:

SQL> with test (col) as
  2    (select 'ABC'   from dual union
  3     select 'BCE1'  from dual union
  4     select '2GHY'  from dual union
  5     select 'WE56S' from dual union
  6     select 'TUY'   from dual
  7    )
  8  select col
  9  from test
 10  where not regexp_like (col, '\d');

COL
-----
ABC
TUY

SQL>

Спасибо за ответ, но это не то, что я хочу получить. Предположим, у меня есть столбец COL1, а его значения - «ABC», «BCE1», «2GHY», «WE56S», «TUY». Теперь в выводе мне нужны только значения, содержащие только алфавиты. Выходные данные должны быть: 'ABC', 'TUY'. Так как это единственные значения, которые не имеют числовых символов.

Seeker 17.04.2018 20:26

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

Littlefoot 17.04.2018 20:29

Входные значения в COL1: 'ABC', 'BCE1', '2GHY', 'WE56S', 'TUY' и выходные должны быть: 'ABC', 'TUY'

Seeker 17.04.2018 21:09

Это сработало, большое спасибо. Теперь у меня возникает вопрос, почему это не дает ожидаемого результата: выберите * from TBL_NAME, где regexp_like (mapping_name, '% [! 0-9]%');

Seeker 17.04.2018 21:31

Потому что это неправильно? % ничего не делает в REGEXP_LIKE регулярного выражения (это не обычный LIKE), а "!" не означает «отрицание», здесь это не имеет значения. Посмотрите на действующие шаблоны здесь: techonthenet.com/oracle/regexp_like.php

Littlefoot 17.04.2018 21:48

Другие вопросы по теме