TRANSLATE function in SQL SERVER

后端 未结 5 1750
醉酒成梦
醉酒成梦 2021-01-26 20:48

I read that there is a function equivalent to the standard function TRANSLATE under DB2 under SQL Server 2017. But how to do under earlier versions?

For definition of fu

5条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-26 21:16

    I propose my translate function:

    CREATE FUNCTION [dbo].[F_Translate]
    (
           @String   varchar(8000), 
           @FromChar varchar(200), 
           @ToChar   varchar(200)
    )
    RETURNS varchar(8000)
    AS
    BEGIN
            DECLARE @result as varchar(8000) = NULL
            DECLARE @currentChar as char(1) = NULL
            DECLARE @CurrentIndexFounded as int = 0
            DECLARE @CurrentIndexString as int = 0
    
            IF(@FromChar IS NULL OR @ToChar IS NULL)
            BEGIN
                return cast('Parameters @FromChar and @ToChar must contains 1 caracter minimum' as int);
            END
            ELSE IF(DATALENGTH(@FromChar) <> DATALENGTH(@ToChar) OR DATALENGTH(@FromChar) = 0)
            BEGIN
                return cast('Parameters @FromChar and @ToChar must contain the same number of characters (at least 1 character)' as int);
            END
    
           IF(@String IS NOT NULL) 
           BEGIN
                SET  @result = '';
                WHILE(@CurrentIndexString < DATALENGTH(@String))
                BEGIN 
                        SET @CurrentIndexString = @CurrentIndexString + 1;
                        SET @currentChar = SUBSTRING(@String, @CurrentIndexString, 1);
                        SET @CurrentIndexFounded  = CHARINDEX(@currentChar COLLATE Latin1_General_CS_AS, @FromChar COLLATE Latin1_General_CS_AS);
                        IF(@CurrentIndexFounded > 0)
                        BEGIN
                                SET @result = CONCAT(@result, SUBSTRING(@ToChar, @CurrentIndexFounded, 1)) ;
                        END
                        ELSE
                        BEGIN
                                SET @result = CONCAT(@result, @currentChar);
                        END
                 END
           END
           return @result
    END
    

提交回复
热议问题