如何在 SQL Server 中比较 Unicode 字符?

rkg*_*rkg 2 regex unicode ascii sql-server-2005

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

\n\n
SELECT COUNT(*) FROM t_question WHERE patindex(N'%[\\xE9]%',question) > 0;\n\nSELECT COUNT(*) FROM t_question WHERE patindex(N'%[\\u00E9]%',question) > 0;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

我构建正则表达式和比较 Unicode 的方式正确吗?

\n\n

编辑:

\n\n

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

\n\n
SELECT COUNT(*) FROM t_question WHERE question LIKE N'%\xc3\xa9%';\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*ith 5

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

\n\n

注意:Like并且patindex接受正则表达式。

\n\n

在 SQL Server 模式语法中,[\\xE9]意味着匹配指定集中的任何单个字符。即匹配\\, x,E9。因此以下任何字符串都将与该模式匹配。

\n\n
    \n
  • “大象”
  • \n
  • “轴”
  • \n
  • “99.9”
  • \n
\n