Недавно пришлось задуматься над задачей перевода текста на русском языке в транслит на уровне 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
Комментариев нет:
Отправить комментарий