我最近问了一个问题,以获取包含特定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) + ']%';
这仍然返回空白值,但我分别删除了这些值。