Преобразование латинских символов без символов в латинские символы в Azure SQL Server

Я хотел бы использовать функцию преобразования латинских символов в латинские символы при создании отчета из данных в БД, которая является Azure SQL Server. т.е. введите исходное имя и выведите имя с латинскими буквами

Например, если имя написано одним из следующих способов:

Ä ä À à Á á Â â Ã ã Å å Ǎ ǎ Ą ą Ă ă Æ æ

Я хотел бы заменить нелатинские символы на A или a.

Если имя написано с одним из следующих:

Ç ç Ć ć Ĉ ĉ Č č

Я хотел бы заменить нелатинские символы на C или c.

Это список нелатинских символов для замены. Это довольно долго, поэтому я спрашиваю, знает ли кто-нибудь умный способ сделать это, а не грубую силу, используя так много операций замены:

введите здесь описание изображения

Спасибо за помощь.


person user1372603    schedule 08.04.2020    source источник
comment
Посмотрите на TRANSLATE; затем вложить их? Удачи!   -  person Larnu    schedule 08.04.2020


Ответы (1)


Используйте COLLATE SQL_Latin1_General_CP1253_CI_AI в своих SELECT утверждениях.

Например:

SELECT 'Ä ä À à Á á Â â Ã ã Å å Ǎ ǎ Ą ą Ă ă Æ æ' COLLATE SQL_Latin1_General_CP1253_CI_AI as [result]

Он будет работать почти со всеми символами, указанными в вашем изображении, за исключением некоторых, таких как Æ и æ. Вы можете использовать TRANSLATE для оставшихся символов, если это действительно необходимо.

Вы можете прочитать больше на здесь .

person Ravi Desai    schedule 08.04.2020
comment
Спасибо. Не уверен, однако, как бы я использовал Translate для тех, у кого заменяющие символы на самом деле являются двумя символами. Разве мне не нужно переводить? Перевести (@first_name,'Ææ','Aeae') - person user1372603; 08.04.2020
comment
проверить эту скрипту. Обратите внимание, что TRANSLATE доступен в SQL Server 2017 и более поздних версиях. Используйте REPLACE, если вы используете более раннюю версию SQL Server 2017. - person Ravi Desai; 08.04.2020
comment
Спасибо, я не могу использовать это так в функции: @first_name_without_none_latin_chaaracters = Translate (@first_name,'Ææ','Aa') COLLATE Latin1_General_CS_AS Потому что мне это нужно в функции, а не просто в select. - person user1372603; 08.04.2020
comment
Затем превратите его в функцию @user1372603. Решение, которое у вас есть, более чем просто превратить в функцию, если вам нужно. Зачем вам нужна скалярная функция для этого? Если у вас нет SQL Server 2019, я не рекомендую это решение из-за отсутствия встраивания. - person Larnu; 08.04.2020