Как найти значения, которые состоят только из цифр или только из латинских букв A-Z без учета регистра?
В таблице надо найти значения, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).
SELECT model, type
FROM Product
WHERE model NOT like '%[^A-Z]%' OR model not like '%[^0-9]%'
Как переписать условие с LIKE через регулярное выражение?
Ответы (3 шт):
Автор решения: Akina
→ Ссылка
SELECT model, type
FROM Product
WHERE REGEXP_LIKE(model, '^[A-Z]+$', 'i')
OR REGEXP_LIKE(model, '^[0-9]+$')
Автор решения: Anton Shchyrov
→ Ссылка
Вместо LIKE вам нужен REGEXP_LIKE
SELECT model, type
FROM Product
WHERE
REGEXP_LIKE(model, '^[a-z]+$', 'i') OR
REGEXP_LIKE(model, '^\d+$')
Или даже так
SELECT model, type
FROM Product
WHERE
REGEXP_LIKE(model, '^([a-z]|\d)+$', 'i')
Автор решения: 0xdb
→ Ссылка
Воспроизводимый пример поможет понять, как переписать на регулярное выражение:
with t (col) as (
select 'Abc' from dual union all -- ok
select '123' from dual union all -- ok
select 'A123' from dual union all -- смесь латинские и цифры
select 'abcÜ' from dual union all -- символ латинский, но не английский
select 'ab c' from dual union all -- пробел
select 'Аbc' from dual -- русский символ А
)
select col, case when regexp_like (col, '^([A-Za-z]+|[0-9]+)$') then 'yes' else 'no' end matched
from t;
Где:
[A-Za-z]+- только латинские символы английского алфавита|- или[0-9]+- только цифры
Даст в результате:
COL MATCHED
----- --------
Abc yes
123 yes
A123 no
abcÜ no
ab c no
Аbc no