Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / REPLACE больших букв большими, маленьких - маленькими / 16 сообщений из 16, страница 1 из 1
26.06.2019, 22:29
    #39830907
Trurl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Работаю с адаптацией казахских адресов в русский язык.
Сайт почты Казахстана предлагает справочники, где в русских названиях используются символы расширенной казахской кириллицы.
Я этот справочник при помощи SSIS перегоняю из исходного UTF8 в nvarchar, и далее мне предстоит заменить казахские буквы наиболее близкими по звучанию русскими (так как в дальнейшем эти сведения будут использоваться в не поддерживающий казахский алфавит системе). Таблица транслитерации предоставлена заказчиком.
Важно - большие буквы заменить большими, маленькие - маленькими.
В БД используется кириллический регистронезависимый Collation.
Можно ли написать хранимую функцию транслитерации, в которой replace будет регистрозависимым?

Или даже абстрагируемся от казахского языка: можно ли в базе с регистронезависимым Collation реализовать замену 'Ё' на 'Е', а 'ё' на 'е' ?
...
Рейтинг: 0 / 0
26.06.2019, 22:40
    #39830909
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
TrurlВ БД используется кириллический регистронезависимый Collation.
Можно ли написать хранимую функцию транслитерации, в которой replace будет регистрозависимым?

Или даже абстрагируемся от казахского языка: можно ли в базе с регистронезависимым Collation реализовать замену 'Ё' на 'Е', а 'ё' на 'е' ?Да, используйте выражение COLLATE с регистрозависимым коллейшеном
Код: sql
1.
select REPLACE(REPLACE(N'Ё-моё' collate Cyrillic_General_CS_AI, N'Ё', N'Е'), N'ё', N'е')
...
Рейтинг: 0 / 0
27.06.2019, 00:41
    #39830919
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
или по ASCII-коду менять
...
Рейтинг: 0 / 0
27.06.2019, 09:58
    #39830967
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Какой ASCII в UTF?
...
Рейтинг: 0 / 0
27.06.2019, 10:05
    #39830971
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Alibek B.Какой ASCII в UTF?нуу код символа имелся в виду, чо придираешься :)

раз у тебя "перегоняю из исходного UTF8 в nvarchar", то функцией UNICODE
Код: sql
1.
select UNICODE(N'ё'), ASCII('ё')
...
Рейтинг: 0 / 0
27.06.2019, 10:49
    #39830997
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
courtнуу код символа имелся в виду, чо придираешься
Если придираться, то в UTF не код символа, а кодовая точка (code point).
...
Рейтинг: 0 / 0
27.06.2019, 12:10
    #39831056
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Trurl,

эта задача решается скриптом на С#, который встраивается в SSIS пакет. Не нужны никакие функции.
...
Рейтинг: 0 / 0
27.06.2019, 17:10
    #39831296
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Владислав Колосовэта задача решается скриптом на С#, который встраивается в SSIS пакет. Не нужны никакие функции.Там тоже придётся вызывать какие нибуть функции :-)
Конечно, для сложных перекодировок лучше использовать C#, но для замены Ё на Е я бы всё таки вызвал REPLACE.
...
Рейтинг: 0 / 0
27.06.2019, 17:36
    #39831309
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
alexeyvg,

там не просто е на ё, автору задан массив преобразований.
...
Рейтинг: 0 / 0
27.06.2019, 17:57
    #39831321
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Владислав Колосовalexeyvg,

там не просто е на ё, автору задан массив преобразований.Если именно замена буквы на букву по массиву преобразований, то я бы тоже подумал.
Непонятен масшаб, к тому же тут нет каких то действий, для которых существуют стандартные библиотеки (наподобии перекодировки).

С другой стороны, если автор уже делает это:Trurlпри помощи SSIS перегоняю из исходного UTF8 в nvarcharи делается это в скрипт таске, то лучше туда же добавить и эту замену, тем более что так будет быстрее.
...
Рейтинг: 0 / 0
27.06.2019, 19:03
    #39831349
Trurl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Реализовал через посимвольный анализ строки и подстановку через

Код: sql
1.
case unicode(@substring)



где @substring - это NCHAR(1)
всего 9 пар казахских символов + русские Ёё
На всём массиве казахских адресов отрабатывает за приемлемое время.

метод с collation в запросе (который так хорошо справляется с Ёё => Ee) не справляется с четырьмя казахскими символами, пришлось отказаться

Всем спасибо
...
Рейтинг: 0 / 0
27.06.2019, 19:45
    #39831368
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Trurlметод с collation в запросе (который так хорошо справляется с Ёё => Ee) не справляется с четырьмя казахскими символами, пришлось отказатьсяА можете привести пример такого символа? Это очень странно, нужно сообщить о баге в Микрософт.
...
Рейтинг: 0 / 0
27.06.2019, 22:00
    #39831415
Trurl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
alexeyvg,

https://upload.wikimedia.org/wikipedia/commons/e/e4/Keyboard_KAZ.png

верхний ряд, третья слева и вторая справа (строчные и прописные)
...
Рейтинг: 0 / 0
28.06.2019, 13:52
    #39831646
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
Trurlalexeyvg,

https://upload.wikimedia.org/wikipedia/commons/e/e4/Keyboard_KAZ.png

верхний ряд, третья слева и вторая справа (строчные и прописные)Странно, почему у вас сервер не справился, у меня справился
Код: sql
1.
2.
3.
4.
select REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
	N'Ё-моё әөӘӨ' 
	collate Cyrillic_General_CS_AI, N'Ё', N'Е'), N'ё', N'е') 
	collate Kazakh_100_CS_AI, N'Ә', N'Е'), N'ә', N'е'), N'Ө', N'О'), N'ө', N'о')


ЗЫ. Тут казахские буквы показываются знаком вопроса, какой то косяк, но я в примере использовал соотв буквы из виртуальной клавиатуры https://www.virtual-keyboard-online.com/ru/kazakh/
Приложил картинкой
...
Рейтинг: 0 / 0
28.06.2019, 13:54
    #39831648
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
alexeyvgСтранно, почему у вас сервер не справился, у меня справилсяРезультат, соответственно, "Е-мое еоЕО"
...
Рейтинг: 0 / 0
06.07.2019, 21:13
    #39834633
Trurl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPLACE больших букв большими, маленьких - маленькими
alexeyvg,

Ваш метод работает, спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / REPLACE больших букв большими, маленьких - маленькими / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]