Недавно пришлось задуматься над задачей перевода текста на русском языке в транслит на уровне SQL запроса. На просторах интернета наткнулся на интересный вариант решения, привожу здесь несколько переработанный и адаптированный текст функции:
CREATE FUNCTION f_Transliterate (@str nvarchar(4000)) RETURNS nvarchar(4000) AS BEGIN DECLARE @str_lat varchar(8000) DECLARE @rus varchar(100), @lat1 varchar(100), @lat2 varchar(100), @lat3 varchar(100) SET @rus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' SET @lat1 = 'abvgdejzzijklmnoprstufkccss"y''ejj' SET @lat2 = ' oh j h hhh hua' SET @lat3 = ' h ' DECLARE @i int, @pos int, @ch varchar(2) SET @i = 1 SET @str_lat = '' WHILE @i <= len(@str) BEGIN SET @ch = substring(@str, @i, 1) SET @pos = charindex(lower(@ch), @rus) IF @pos > 0 begin IF ascii(upper(@ch)) = ascii(@ch) SET @str_lat = @str_lat + upper(substring(@lat1, @pos, 1)) + rtrim(substring(@lat2, @pos, 1)) + rtrim(substring(@lat3, @pos, 1)) ELSE SET @str_lat = @str_lat + substring(@lat1, @pos, 1) + rtrim(substring(@lat2, @pos, 1)) + rtrim(substring(@lat3, @pos, 1)) END ELSE SET @str_lat = @str_lat + @ch SET @i = @i + 1 END RETURN @str_lat END
Комментариев нет:
Отправить комментарий