05.03.2014

SQL: Транслиттеризация на уровне SQL

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

Комментариев нет:

Отправить комментарий