SQL查找仅包含某个Unicode范围内的字符的行

时间:2018-09-10 16:08:13

标签: sql sql-server unicode

我最近问了一个问题,以获取包含某个Unicode范围内的字符的行。

SELECT *
FROM #kanjinames
WHERE UNICODE(LEFT(ForeNames, 1)) BETWEEN 0x4e00 AND 0x9fff

一个非常有帮助的用户与我分享了以上内容。据我了解,它检查左边的第一个字符,如果它在Unicode范围内,则返回a行。通过测试,我相信这是可行的。

我当前的问题是如何检查整个列是否在范围内?例如:

石山コンタクトレンズ

上面的查询中包含的字符超出范围(前两个字符在范围内),但是我不确定如何检查整个字段。我正在使用类似

的东西
is not like N'%^a-z%'

用于英文字母。只是不确定如何将其应用于这种情况。

任何帮助都会对此大有帮助。

1 个答案:

答案 0 :(得分:1)

我认为这会起作用:

SELECT *
FROM #kanjinames
WHERE ForeNames NOT LIKE '%[^' + NCHAR(0x4e00) + '-' NCHAR(0x9fff) + ']%';

也就是说,该字符串在该序列之外不包含任何字符。

编辑:为了使它正常工作,我不得不对其稍加改动。我必须使用十进制值而不是十六进制。

SELECT *
    FROM #kanjinames
    WHERE ForeNames NOT LIKE '%[^' + NCHAR(19968) + '-' + NCHAR(40802) + ']%';

这仍然返回空白值,但我将其分别删除了。