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
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