UPPER () для специальных символов (ascii 181) - PullRequest
0 голосов
/ 20 февраля 2020

В Википедии греческая буква Му (https://en.wikipedia.org/wiki/Mu_ (буква) ) имеет разные символы для прописных и строчных букв. В T- SQL при использовании функции upper() это игнорируется и не конвертируется. Однако в других системах, таких как informatica, он знает, как вывести правильный символ. Как мне получить T- SQL версию этого. Я попытался использовать сопоставление на столбце без удачи.

например (я пробовал все параметры сортировки в sys.fn_helpcollations():

select  
  upper(MERCHANT_NAME collate SQL_Hungarian_CP1250_CI_AS) as converted
from my test table

, но выдает: µ
не то, что я ожидаю: M

Ответы [ 3 ]

5 голосов
/ 21 февраля 2020

ASCII-символ 181 (микросигнал) не имеет заглавной буквы.
Греческая строчная буква Mu должна быть представлена ​​парой UTF-8 206 188. Эта буква правильно преобразуется в заглавную Mu с помощью функции UPPER.
Если вам нужно использовать функцию UPPER, вам нужно использовать надлежащие коды UTF для греческих букв, а не математических символов.

Из Википедии (https://en.wikipedia.org/wiki/Mu_ (буква) ) у вас есть следующие 5 символов :

  • греческая заглавная буква mu (UTF-8: 206 156, не существует в Windows 1525)
  • греческая строчная буква mu (UTF-8: 206 188, не существует в Windows 1525)
  • микро знак (UTF-8: 194 181, Windows 1525: 181)
  • копти c заглавная буква ми
  • копти c маленькая буква mi

Греческая строчная буква mu и микро знак выглядят одинаково.

4 голосов
/ 21 февраля 2020

Чтобы проиллюстрировать @ ответ Петра:

with cte (x) as ( select N'µ' union all select N'μ' ) select x, UNICODE(x), UPPER(x) from cte

приводит к

µ   181    µ
μ   956    Μ

ОП фактически содержит NCHAR (181)

0 голосов
/ 20 февраля 2020

Скорее всего, это связано с тем, что языковые настройки не связаны между собой. В то же время вы можете использовать заменить

SELECT REPLACE(MERCHANT_NAME COLLATE SQL_Latin1_General_CP1_CS_AS, 'µ', 'M') 
from my test table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...