Используйте Regex, чтобы исключить любые значения, которые не имеют буквы - PullRequest
0 голосов
/ 04 февраля 2020

Например, столбец ниже:

Col_A
    1
  1,2
 the1
TH,E2
 THEN
 1_Th
   11

Мой желаемый результат будет:

Col_A
 the1
TH,E2
 THEN
 1_Th

Я пробовал это, но не повезло:

ОБНОВЛЕНИЕ РЕДАКТИРОВАНИЯ:

with new as (
select distinct COL_A test from TABLE_1)

select test from new
where test regexp '[a-zA-Z]'

Тип данных = VARCHAR (16777216)

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

на снежинке это работает:

SELECT column1 
FROM VALUES ('Col_A'), ('1'), ( '1,2'), ( 'the1'), 
     ( 'TH,E2'), ( 'THEN'), ( '1_Th'), ( '11')
WHERE column1 RLIKE '.*[a-zA-Z].*';

дает:

COLUMN1
Col_A
the1
TH,E2
THEN
1_Th

И учитывая REGEXP является псевдонимом для RLIKE это также работает

SELECT column1 
FROM VALUES ('Col_A'), ('1'), ( '1,2'), ( 'the1'), 
     ( 'TH,E2'), ( 'THEN'), ( '1_Th'), ( '11')
WHERE column1 REGEXP '.*[a-zA-Z].*';

, учитывая, что они ведут себя как LIKE, что не является жадным совпадением, подстановочные знаки необходимы для сопоставления всех до и после токенов.

WHERE column1 REGEXP '.*[:alpha:]*';

также работает

0 голосов
/ 04 февраля 2020

Проверено и работает:

select * from TABLE_1 where REGEXP_INSTR(COL_A, '[A-Z]', 1, 1, 0, 'i') > 0

REGEXP_INSTR вернет позицию первого совпадения, поэтому он перестанет смотреть после этого. При использовании REGEXP_INSTR шаблон не должен соответствовать целому столбцу только при первом совпадении. Это должно быть быстрее. Все параметры после шаблона [AZ] являются значениями по умолчанию, но необходимо добавить параметр 'i' для сопоставления без учета регистра.

0 голосов
/ 04 февраля 2020

Вот один из методов:

where col regexp '.*[a-zA-Z].*'

Синтаксис, который вы используете для like, задает c до SQL Сервер и Sybase.

...