如何让LIKE不匹配重音字符?

时间:2014-04-04 23:34:19

标签: sql sql-server unicode

我正在尝试在SEDE上写一个查询,在帖子的标题中查找某些重音字符 - 如下所示:

SELECT
  b.Id AS [Post Link]
FROM
  Posts b
WHERE
  b.Title LIKE '%[ĀāĒēĪīŌōŪūÂâÊêÎîÔôÛû]%'

不幸的是,这会返回标题中包含元音的任何帖子,无论是否有重音,我们可以通过运行看到:

SELECT
  CASE
    WHEN 'tuv' LIKE '%[ĀāĒēĪīŌōŪūÂâÊêÎîÔôÛû]%'
    THEN 'matched'
    ELSE 'not matched'
  END

会导致返回'matched'

如何执行仅选择Title包含我指定的重音字符的行的查询?从我对SQL的模糊理解,我一直认为这可能需要以某种方式使用COLLATE。 (请注意,在这种情况下我无法控制数据库,因此我无法更改表或数据库级别的任何设置或任何内容 - 我必须使用SEDE已经提供的内容。)

1 个答案:

答案 0 :(得分:4)

您唯一缺少的是N前缀。使用unicode字符时,您总是需要通过在字符串前加N

来明确告诉sql server字符串可以包含一些unicode字符
SELECT
  b.Id AS [Post Link]
FROM
  Posts b
WHERE
  b.Title LIKE N'%[ĀāĒēĪīŌōŪūÂâÊêÎîÔôÛû]%'

插入,更新数据时也是如此

INSERT INTO TableName(ColumName)
VALUES (N'ĀāĒēĪīŌōŪūÂâÊêÎîÔô')