我的名字字段中有垃圾,我想清理它们。我试图看到无效的名称(包含所有特殊字符,数字无效)。
select firstname
from table
where firstname !~'[[:alpha:]]'
我的查询没有以正确的方式运作。
表格中的输入值如下所示:
Firstname
---------
jack
1h7kk
$han
M.a
pac*^
___*(6&%
a
输出(应该看起来像这样)
Firstname
---------
1h7kk
$han
pac*^
___*(6&%
感谢您的帮助。
谢谢你,Swathi。
答案 0 :(得分:1)
如果您尝试获取所有无效的名字,请使用
select name
from t
where name !~*'^[a-z]+$'
使用*
进行不区分大小写的匹配。
要获取有效名称,请使用
select name
from t
where name ~*'^[a-z]+$'
编辑:根据OP的评论,名字也可以包含有效的-
和space
字符。
select name
from t
where name ~*'(^[a-z]+\.?\-?\s*?[a-z]+\.?$|^[a-z]+$)'
说明:
^[a-z]+
以a-z范围内的一个或多个字符开头(不区分大小写)\.
后跟可选的.
\-?
后跟可选的-
字符\s?
后跟可选空格[a-z]+
后跟a-z范围内的一个或多个字符(不区分大小写)\.$
以可选.
答案 1 :(得分:0)
我建议使用游标循环遍历表中的每个条目,然后逐个循环遍历每个条目,用ISALPHA()
测试每个条目以查看名称中的任何字符是否不是字母字符。像这样:
DECLARE AlphaCursor CURSOR
FOR SELECT firstname
FROM TABLE;
DECLARE @string varchar(15);
DECLARE @index int;
DECLARE @len int;
DECLARE @char char(1);
DECLARE @IsGood Boolean;
OPEN AlphaCursor;
FETCH NEXT FROM AlphaCursor INTO @string;
WHILE @@FETCH_STATUS = 0
BEGIN
@IsGood = TRUE;
SET @index = 1;
SET @len= LEN(@string);
WHILE @index<= @len
BEGIN
SET @char = SUBSTRING(@string, @index, 1)
IF NOT ISALPHA(@char) THEN
@IsGood = FALSE;
END;
SET @index= @index+ 1;
END;
IF NOT @IsGood THEN
PRINT @string;
END;
FETCH NEXT FROM AlphaCursor INTO @string;
END;