1

ラテン語からキリル文字に変換する ms sql 関数を探しています。誰かが解決策を完了しましたか? (例: 'spasibo' -> 'спасибо')

4

2 に答える 2

1
CREATE FUNCTION dbo.ToCyrillic
(
    @str Nvarchar(MAX)
)
RETURNS Nvarchar(MAX)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @inputLength int
    DECLARE @i int
    DECLARE @latinSymbol nVarchar(2)
    DECLARE @cyrillicSymbol nVarchar(2)
    DECLARE @outputValue nVarchar(MAX)

    SET @outputValue=N''
    SET @inputLength=LEN(@str)
    SET @i=1

    DECLARE @TransTable table (upperCyr nvarchar(2) COLLATE Cyrillic_General_CI_AS, 
                                lowerCyr nvarchar(2) COLLATE Cyrillic_General_CI_AS, 
                                lowerLat nvarchar(2), cid int PRIMARY KEY IDENTITY(1,1))

    insert into @TransTable values (N'А', N'а', N'a')
    insert into @TransTable values (N'Б', N'б', N'b')
    insert into @TransTable values (N'В', N'в', N'v')
    insert into @TransTable values (N'Г', N'г', N'g')
    insert into @TransTable values (N'Д', N'д', N'd')
    insert into @TransTable values (N'Ђ', N'ђ', N'đ')
    insert into @TransTable values (N'Е', N'е', N'e')
    insert into @TransTable values (N'Ж', N'ж', N'ž')
    insert into @TransTable values (N'З', N'з', N'z')
    insert into @TransTable values (N'И', N'и', N'i')
    insert into @TransTable values (N'Ј', N'ј', N'j')
    insert into @TransTable values (N'К', N'к', N'k')
    insert into @TransTable values (N'Л', N'л', N'l')
    insert into @TransTable values (N'Љ', N'љ', N'lj')
    insert into @TransTable values (N'М', N'м', N'm')
    insert into @TransTable values (N'Н', N'н', N'n')
    insert into @TransTable values (N'Њ', N'њ', N'nj')
    insert into @TransTable values (N'О', N'о', N'o')
    insert into @TransTable values (N'П', N'п', N'p')
    insert into @TransTable values (N'Р', N'р', N'r')
    insert into @TransTable values (N'С', N'с', N's')
    insert into @TransTable values (N'Т', N'т', N't')
    insert into @TransTable values (N'Ћ', N'ћ', N'ć')
    insert into @TransTable values (N'У', N'у', N'u')
    insert into @TransTable values (N'Ф', N'ф', N'f')
    insert into @TransTable values (N'Х', N'х', N'h')
    insert into @TransTable values (N'Ц', N'ц', N'c')
    insert into @TransTable values (N'Ч', N'ч', N'č')
    insert into @TransTable values (N'Џ', N'џ', N'dž')
    insert into @TransTable values (N'Ш', N'ш', N'š')


    WHILE (@i<=@inputLength)
    BEGIN
        SET @latinSymbol=SUBSTRING(@str,@i,1)
        SET @cyrillicSymbol=@latinSymbol    -- If not found below, then use that char (e.g. numbers etc)

        IF ((@latinSymbol COLLATE Croatian_CS_AS)=UPPER(@latinSymbol))
        BEGIN
            SELECT TOP 1 @cyrillicSymbol=upperCyr FROM @TransTable WHERE lowerlat=lower(@latinSymbol) ORDER BY CID
        END
        ELSE
        BEGIN
            SELECT TOP 1 @cyrillicSymbol=lowerCyr FROM @TransTable WHERE lowerlat=lower(@latinSymbol) ORDER BY CID
        END
        SET @i=@i+1
        set @outputValue=@outputValue+@cyrillicSymbol
    END

    RETURN @outputValue

END
于 2014-10-27T13:18:22.750 に答える