SQL находит строки, содержащие только символы из определенного диапазона Юникода - PullRequest
0 голосов
/ 10 сентября 2018

Я недавно задал вопрос, чтобы получить строки, содержащие символы в определенном диапазоне Юникода.

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

Очень полезный пользователь поделился со мной выше. Насколько я понимаю, он проверяет первый символ слева и, если он находится в диапазоне Юникода, возвращает строку. Я считаю, что благодаря тестированию это работает.

Моя текущая проблема заключается в том, как мне проверить, что весь столбец находится в пределах диапазона? Например:

石山コンタクトレンズ

Вышеприведенные символы содержат символы вне диапазона (первые два символа находятся в пределах диапазона) в приведенном выше запросе, но я не уверен в том, как выполнить проверку всего поля. Я не использую такие вещи, как

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

для английского алфавита. Просто не знаю, как применить это в этой ситуации.

Любая помощь была бы хороша в этом.

1 Ответ

0 голосов
/ 10 сентября 2018

Я думаю, что это будет работать:

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

То есть строка не содержит символов вне этой последовательности.

Редактировать: мне пришлось немного изменить это, чтобы заставить его работать. Мне пришлось использовать десятичные значения вместо шестнадцатеричного.

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

Это все еще возвращает пустые значения, но я удалил их отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...