SQL Server 2008查询查找列中包含非字母数字字符的行
几周前我实际上被问到这一点,但我确切知道如何使用SP或UDF执行此操作,但我想知道是否有无需这些方法即可快速简单地完成此操作。我假设有,我无法找到它。SQL Server 2008查询查找列中包含非字母数字字符的行
我需要做的一点是,虽然我们知道哪些字符是允许的(az,AZ,0-9),我们不想指定什么是不允许的(#@!$ etc ... )。另外,我们想拉动那些有非法字符的行,这样它就可以列出给用户来修复(因为我们无法控制输入过程,所以我们在这一点上什么都不能做)。
我曾浏览过SO和Google,但无法找到任何我想做的事情。我看过很多例子,它们可以告诉你它是否包含字母数字字符,或者不能,但是能够在我没有在查询表格中找到的句子中提取撇号的东西。
请注意,此varchar
列中的值可能为null
或''
(空)。
不是这样做吗?
SELECT * FROM TABLE
WHERE COLUMN_NAME LIKE '%[^a-zA-Z0-9]%'
设置
use tempdb
create table mytable (mycol varchar(40) NULL)
insert into mytable VALUES ('abcd')
insert into mytable VALUES ('ABCD')
insert into mytable VALUES ('1234')
insert into mytable VALUES ('efg%^&hji')
insert into mytable VALUES (NULL)
insert into mytable VALUES ('')
insert into mytable VALUES ('apostrophe '' in a sentence')
SELECT * FROM mytable
WHERE mycol LIKE '%[^a-zA-Z0-9]%'
drop table mytable
结果
mycol
----------------------------------------
efg%^&hji
apostrophe ' in a sentence
SQL Server有非常有限的正则表达式的支持。您可以使用PATINDEX像这样的东西
PATINDEX('%[a-zA-Z0-9]%',Col)
如果你想使用PATINDEX,你需要这样做: “SELECT * FROM mytable WHERE PATINDEX('%[^ a-zA-Z0-9]%',mycol)> 1” – beach 2009-12-17 06:19:33
是的,这是正确。在列列表中选择它只会显示值在哪里。 – 2009-12-17 06:23:43
这是我如何使用它删除特定列中的非拉丁字符的行: delete FROM [DefaultConnection]。[dbo]。[AspNetUsers]其中PATINDEX('%[a-zA-Z0-9]%',国家)= 0 – 2016-07-22 18:05:00
我发现this页面相当简洁的解决方案。最棒的是你可以看到角色是什么以及它在哪里。然后它提供了一个超级简单的方法来修复它(可以将它组合并构建成一段驱动程序代码以扩展它的应用程序)。
DECLARE @tablename VARCHAR(1000) ='Schema.Table'
DECLARE @columnname VARCHAR(100)='ColumnName'
DECLARE @counter INT = 0
DECLARE @sql VARCHAR(MAX)
WHILE @counter <=255
BEGIN
SET @sql=
'SELECT TOP 10 '[email protected]+','+CAST(@counter AS VARCHAR(3))+' as CharacterSet, CHARINDEX(CHAR('+CAST(@counter AS VARCHAR(3))+'),'[email protected]+') as LocationOfChar
FROM '[email protected]+'
WHERE CHARINDEX(CHAR('+CAST(@counter AS VARCHAR(3))+'),'[email protected]+') <> 0'
PRINT (@sql)
EXEC (@sql)
SET @counter = @counter + 1
END
然后......
UPDATE Schema.Table
SET ColumnName= REPLACE(Columnname,CHAR(13),'')
感谢艾曼·加扎利。
什么版本的SQL Server?这听起来像一个正则表达式的工作 – 2009-12-17 06:04:59
@OMG小马我已经更新了这个主题,它更多的是“我想你可以做到这一点”,而不是一个特定的系统需要,但简单的缘故让我们只说它是2008年。 – Jay 2009-12-17 06:22:07