我最近问了一个问题,以获取包含某个Unicode范围内的字符的行。
SELECT *
FROM #kanjinames
WHERE UNICODE(LEFT(ForeNames, 1)) BETWEEN 0x4e00 AND 0x9fff
一个非常有帮助的用户与我分享了以上内容。据我了解,它检查左边的第一个字符,如果它在Unicode范围内,则返回a行。通过测试,我相信这是可行的。
我当前的问题是如何检查整个列是否在范围内?例如:
石山コンタクトレンズ
上面的查询中包含的字符超出范围(前两个字符在范围内),但是我不确定如何检查整个字段。我正在使用类似
的东西is not like N'%^a-z%'
用于英文字母。只是不确定如何将其应用于这种情况。
任何帮助都会对此大有帮助。
答案 0 :(得分:1)
我认为这会起作用:
SELECT *
FROM #kanjinames
WHERE ForeNames NOT LIKE '%[^' + NCHAR(0x4e00) + '-' NCHAR(0x9fff) + ']%';
也就是说,该字符串在该序列之外不包含任何字符。
编辑:为了使它正常工作,我不得不对其稍加改动。我必须使用十进制值而不是十六进制。
SELECT *
FROM #kanjinames
WHERE ForeNames NOT LIKE '%[^' + NCHAR(19968) + '-' + NCHAR(40802) + ']%';
这仍然返回空白值,但我将其分别删除了。