在SQL Server

时间:2016-08-26 14:23:41

标签: sql sql-server-2014-express

select * 
from table
where column LIKE '%[^0-9a-zA-Z]%'

如何在where子句中包含以下字符也被认为不是“特殊”?

(,./;#:[]{}=-_+)(*^!`\|)

基本上我想要回复一堆西里尔/北欧字符或任何其他有趣的字符。

还有什么区别     选择 *     从表     列LIKE'%[^ 0-9a-zA-Z]%'

select * 
from table
where column NOT LIKE '%[0-9a-zA-Z]%'

重复:我想找到像这样的东西Dú 而不是大宝

由于

4 个答案:

答案 0 :(得分:1)

你需要用OR concondition扩展你的喜欢..

SELECT * 
FROM table
WHERE column LIKE '%[^0-9a-zA-Z]%'
     OR column LIKE "%#%" 
     OR column LIKE "%{%" OR (etc.)

答案 1 :(得分:0)

... LIKE '[[]%'

您可以使用[ ]围绕特殊字符(或范围)。你不需要逃避结束括号。

答案 2 :(得分:0)

你应该能够简单地将这些字符包含在你已经使用的相同模式中,只需确保在必要时用“\”来逃避每个字符,如下所示:

select * 
from table
where column LIKE '%[^0-9a-zA-Z\,\.\/\;\#\:\[\]\{\}\=\-\_\+\)\(\*\^\!\`\\\|]%'

修改

为了更好地适应Unicode(即nvarchar数据类型),有几个选项讨论HERE,其中一个更优雅(IIF你的默认排序规则是ASCII或类似)似乎是使用这样的条件:

select *
from table
where column <> cast(column as varchar(500)) --length should match the base column length
or column LIKE N'%[^0-9a-zA-Z\,\.\/\;\#\:\[\]\{\}\=\-\_\+\)\(\*\^\!\`\\\|]%'

nvarchar值与varchar等价物的比较是识别所有非ascii兼容字符(如Cyrillic)的简单方法,然后LIKE进一步过滤到ASCII字符的子集。似乎为此目的很好地工作。

答案 3 :(得分:0)

... LIKE '[[]%'

您可以使用[ ]来包围特殊字符(或范围)。您无需逃脱右括号。