阿里云SQL-Hive,SQL只排除数字和字母和单个汉字
Alicloud SQL-Hive, SQL to exclude number only and alphabet only and single chinese word only
我有一个像下面这样的专栏
**col1**
1244
a888d
ahahd
我
我是
19mon
我想要的输出是
**col1**
a888d
我是
19mon
我试图使用下面的语法来排除数字和字母,但是没有打印出任何字符串。而且我不知道如何排除单个中文单词,如上面的“我”。
SELECT col1 from abc
where col1 like '%[^0-9.]%' AND col1 like '%[^a-zA-Z.]%'
有什么解决办法吗?谢谢!
您可以尝试类似的方法:
SELECT *
FROM abc
WHERE LOWER(col1) != UPPER(col1) -- COLLATE Latin1_General_CS_AS SQL Server specific
OR (LENGTH(col1) != 1 AND col1 like '%[^a-zA-Z.0-9]%');
使用正则表达式:
with your_data as (
select stack(6,
'1244',
'a888d',
'ahahd',
'我',
'我是',
'19mon'
) as col1
)
select col1 from your_data
where col1 not rlike ('^\d+$') --not digits only
and col1 not rlike ('^[a-zA-Z]+$') --not alpha only
and length(col1) !=1; --not single char (digit and alpha filtered already)
Returns:
col1
a888d
我是
19mon
我有一个像下面这样的专栏
**col1**
1244
a888d
ahahd
我
我是
19mon
我想要的输出是
**col1**
a888d
我是
19mon
我试图使用下面的语法来排除数字和字母,但是没有打印出任何字符串。而且我不知道如何排除单个中文单词,如上面的“我”。
SELECT col1 from abc
where col1 like '%[^0-9.]%' AND col1 like '%[^a-zA-Z.]%'
有什么解决办法吗?谢谢!
您可以尝试类似的方法:
SELECT *
FROM abc
WHERE LOWER(col1) != UPPER(col1) -- COLLATE Latin1_General_CS_AS SQL Server specific
OR (LENGTH(col1) != 1 AND col1 like '%[^a-zA-Z.0-9]%');
使用正则表达式:
with your_data as (
select stack(6,
'1244',
'a888d',
'ahahd',
'我',
'我是',
'19mon'
) as col1
)
select col1 from your_data
where col1 not rlike ('^\d+$') --not digits only
and col1 not rlike ('^[a-zA-Z]+$') --not alpha only
and length(col1) !=1; --not single char (digit and alpha filtered already)
Returns:
col1
a888d
我是
19mon