【问题标题】:Searching for special chars in SQL Server在 SQL Server 中搜索特殊字符
【发布时间】:2016-08-26 14:23:40
【问题描述】:
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ú 而不是大发。

谢谢

【问题讨论】:

  • 标记使用的 dbms 产品。 (其中一些有正则表达式,其他没有。)
  • 你试过我发的方式了吗?
  • 是的,不幸的是,它识别出有趣的西里尔字符位于 a-z 和 A-Z 的范围括号内。这与排序规则有关吗?

标签: sql sql-server-2014-express


【解决方案1】:

你需要用 OR 条件扩展你的喜欢..

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

【讨论】:

  • OR 运算符还是 AND?
  • OR ..您必须针对任何这些特殊字符获取值..
  • 对.. 我不想接收那些特殊字符的值。我想用不同的文本格式获得像 ú 这样的西里尔字母值。
【解决方案2】:

您应该能够简单地将这些字符包含在您已经拥有的相同模式中,只需确保在必要时使用“\”对每个字符进行转义,如下所示:

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 字符的子集。似乎很适合这个目的。

【讨论】:

  • 谢谢,但由于某种原因,它不会返回任何西里尔字母或看起来很有趣的字符。也许这与排序规则有关,因为它识别出它们介于 a-z 和 A-Z 之间?
  • @DiamondDog 现在编辑答案以更好地处理非 ascii (Unicode) 内容
【解决方案3】:
... LIKE '[[]%'

您可以使用[ ] 包围一个特殊字符(或范围)。您不需要转义右括号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 2016-02-10
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多