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

SQL查找仅包含特定Unicode范围内字符的行,sql,sql-server,unicode,Sql,Sql Server,Unicode,我最近问了一个问题,以获取包含特定Unicode范围内字符的行 SELECT * FROM #kanjinames WHERE UNICODE(LEFT(ForeNames, 1)) BETWEEN 0x4e00 AND 0x9fff 一位非常有帮助的用户与我分享了上述内容。据我所知,它会检查左边的第一个字符,如果它在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) + ']%';

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

SSMS不允许您在类似Unicode N的表达式中输入日语字符吗?顺便问一下,您的数据库是否使用支持Unicode的排序规则?它使用拉丁语1_General_CI_作为排序规则。它确实允许我使用日文字符。我必须稍微修改一下才能让它正常工作。我不得不使用十进制值而不是十六进制。从kanjinames中选择*,其中的名字不象“%[^”+NCHAR19968+'-'+NCHAR40802+']%”;这仍然返回空值,但我分别删除了这些值。@JimmyPop13。这很有趣。我希望十六进制值能起作用。嗨,Gordon,在检查输出时,它会返回任何包含范围内字符的行。是否有方法返回仅包含范围内字符的行?谢谢你的帮助。@JimmyPop13。不喜欢“[^…]”的应该这样做。你是对的,我已经将它与英文字母进行了对比测试,效果很好。一定是Unicode范围或其他方面的问题。不知道为什么在选择Unicode时会感到困惑。将不得不进一步调查。如果我能给出一个答案,我一定会把它加在这里。