SQL 查找仅包含特定 Unicode 范围内的字符的行



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

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

一位非常乐于助人的用户与我分享了上述内容。据我了解,它会检查左侧的第一个字符,如果它在 Unicode 范围内,它会返回一个行。通过测试,我相信这是有效的。

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

石山コンタクトレンズ

上面的查询中包含范围之外的字符(前两个字符在范围内(,但我不确定如何检查整个字段。我不再使用类似的东西

is not like N'%^a-z%'

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

任何帮助都会很棒。

我认为这将起作用:

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

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

编辑:我不得不稍微改变一下才能让它工作。我不得不使用十进制值而不是十六进制。

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

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

相关内容

最新更新