使用正则表达式排除任何没有字母的值

Use Regex to Exclude any values that do not have a letter

例如,下面的列:

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)

这是一种方法:

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

您为 like 使用的语法特定于 SQL Server 和 Sybase。

已测试并正常工作:

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

REGEXP_INSTR 将 return 第一个匹配项的位置,因此它将停止查找。使用 REGEXP_INSTR 模式不必只匹配第一个匹配项的整个列。它应该更快。 [A-Z] 模式后的选项都是默认的,但需要添加 'i' 选项以进行不区分大小写的匹配。

在雪花上这有效:

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 is an alias for 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:]*';

也有效