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

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

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

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

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

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

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

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

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



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

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

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

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

верхний ряд, третья слева и вторая справа (строчные и прописные)
...
Рейтинг: 0 / 0
REPLACE больших букв большими, маленьких - маленькими
    #39831646
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
REPLACE больших букв большими, маленьких - маленькими
    #39831648
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgСтранно, почему у вас сервер не справился, у меня справилсяРезультат, соответственно, "Е-мое еоЕО"
...
Рейтинг: 0 / 0
REPLACE больших букв большими, маленьких - маленькими
    #39834633
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

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


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