【问题标题】:How to compare Unicode characters in SQL server?如何比较 SQL Server 中的 Unicode 字符?
【发布时间】:2011-05-18 04:48:12
【问题描述】:

您好,我正在尝试通过执行以下查询来查找我的数据库 (SQL Server) 中文本中包含字符 é 的所有行。

SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\xE9]%',question) > 0;

SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\u00E9]%',question) > 0;

但是我发现了两个问题:(a)它们都返回不同数量的行,(b)它们返回的行没有指定的字符。

我构造正则表达式和比较 Unicode 的方式是否正确?

编辑:

问题列使用数据类型nvarchar 存储。 以下查询给出了正确的结果。

SELECT COUNT(*) FROM t_question WHERE question LIKE N'%é%';

【问题讨论】:

    标签: regex sql-server-2005 unicode ascii


    【解决方案1】:

    为什么不使用SELECT COUNT(*) FROM t_question WHERE question LIKE N'%é%'

    注意:Likepatindex接受正则表达式。

    在 SQL Server 模式语法中,[\xE9] 表示 match any single character within the specified set。即匹配\xE9。因此,以下任何字符串都将匹配该模式。

    • “大象”
    • “轴”
    • “99.9”

    【讨论】:

    • 那么第一个匹配的是\,0,0,E还是9?有没有办法在查询中实际指定 unicode?​​span>
    • @Ravi - 如果出于某种原因您不想只使用文字 WHERE patindex(N'%é%',question) > 0,则可以使用 WHERE patindex(N'%' + NCHAR(0xE9) + '%',question) > 0
    • 非常感谢马丁。这真的很有帮助。我的印象是 PATINDEX 支持正常的正则表达式。
    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2022-07-22
    • 2013-01-01
    • 2011-05-13
    相关资源
    最近更新 更多