使用正则表达式排除任何没有字母的值
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:]*';
也有效
例如,下面的列:
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:]*';
也有效