четверг, 10 апреля 2014 г.

MSSQL: Функция для транслита

Попытался тут давеча использовать SOUNDEX и DIFFERENCE для поиска похожих фамилий. Безуспешно - выяснилось, что эти функции с кириллицей не работают. Возникла идея транслитерировать фамилии и уже затем скармливать их этим функциям. Эксперимент показал, что всё равно получается не очень хорошо, так что идея умерла. А функция транслитерации (по стандарту ГОСТ Р 52535.1-2006) осталась, вот:
CREATE FUNCTION TranslitString(@string varchar(256)) RETURNS varchar(256)
AS BEGIN

DECLARE @return varchar(256)

SET @return = UPPER(@string)
SET @return = REPLACE(@return, 'АЙ', 'AY')
SET @return = REPLACE(@return, 'ЕЙ', 'EY')
SET @return = REPLACE(@return, 'ИЙ', 'IY')
SET @return = REPLACE(@return, 'ОЙ', 'OY')
SET @return = REPLACE(@return, 'УЙ', 'UY')
SET @return = REPLACE(@return, 'ЫЙ', 'Y')
SET @return = REPLACE(@return, 'ЭЙ', 'EY')
SET @return = REPLACE(@return, 'ЮЙ', 'YUY')
SET @return = REPLACE(@return, 'ЯЙ', 'YAY')
SET @return = REPLACE(@return, 'А', 'A')
SET @return = REPLACE(@return, 'Б', 'B')
SET @return = REPLACE(@return, 'В', 'V')
SET @return = REPLACE(@return, 'Г', 'G')
SET @return = REPLACE(@return, 'Д', 'D')
SET @return = REPLACE(@return, 'Е', 'E')
SET @return = REPLACE(@return, 'Ё', 'E')
SET @return = REPLACE(@return, 'Ж', 'ZH')
SET @return = REPLACE(@return, 'З', 'Z')
SET @return = REPLACE(@return, 'И', 'I')
SET @return = REPLACE(@return, 'Й', 'I')
SET @return = REPLACE(@return, 'К', 'K')
SET @return = REPLACE(@return, 'Л', 'L')
SET @return = REPLACE(@return, 'М', 'M')
SET @return = REPLACE(@return, 'Н', 'N')
SET @return = REPLACE(@return, 'О', 'O')
SET @return = REPLACE(@return, 'П', 'P')
SET @return = REPLACE(@return, 'Р', 'R')
SET @return = REPLACE(@return, 'С', 'S')
SET @return = REPLACE(@return, 'Т', 'T')
SET @return = REPLACE(@return, 'У', 'U')
SET @return = REPLACE(@return, 'Ф', 'F')
SET @return = REPLACE(@return, 'Х', 'KH')
SET @return = REPLACE(@return, 'Ц', 'TC')
SET @return = REPLACE(@return, 'Ч', 'CH')
SET @return = REPLACE(@return, 'Ш', 'SH')
SET @return = REPLACE(@return, 'Щ', 'SHCH')
SET @return = REPLACE(@return, 'Ы', 'Y')
SET @return = REPLACE(@return, 'Э', 'E')
SET @return = REPLACE(@return, 'Ю', 'IU')
SET @return = REPLACE(@return, 'Я', 'IA')
SET @return = REPLACE(@return, 'Ь', '')
SET @return = REPLACE(@return, 'Ъ', '')

RETURN @return

END