SQL Server UDF函数用于替换列中的字符

时间:2018-06-08 14:24:15

标签: sql-server

我正在尝试在SQL服务器中创建一个函数,该函数将列名作为参数,此列包含人的名字,我手动插入这些名称。任何包含特殊字符的名称,例如'在O'Brian中我将值插入O $ 6Brian,代表'$ 6。对杰克和杰克来说也一样吉尔&我插入7美元,所以在数据库中,这看起来像杰克$ 7吉尔。

所以当有人将Names列的名称(在我的情况下称为fname)传递给函数时,我希望函数用相应的字符替换$ 6和$ 7。

我知道这可以在前端应用程序中使用,但我只是想学习一些更多的SQL因此为什么我要求我到目前为止有以下哪些不起作用。

create function fn_convertDBChars(@stringtoconvert nvarchar)
returns nvarchar(20)
as
begin
    declare @Return nvarchar(20)

    select 
        @Return = case @stringtoconvert
                     when '$6' then REPLACE(@stringtoconvert, '$7', '&')
                  end

    return @Return
end;

我很感激任何建议。

2 个答案:

答案 0 :(得分:1)

只需使用内置函数REPLACE,如下所示:

set @Return = REPLACE(@stringtoconvert, '$7', '&') 
where @stringtoconvert like '%$7%'

答案 1 :(得分:1)

除了你应该使用LIKE运算符匹配模式之外,你的函数的大部分都是正确的。您可以用单引号替换$ 6,用&代替$ 7像这样的用户定义函数中的符号。当然,您将在内部使用REPLACE功能。这是你的功能的样子。

create function fn_convertDBChars(@stringtoconvert NVARCHAR(20))
    returns nvarchar(20)
as
begin
    declare @Return nvarchar(20)
    select @Return = CASE WHEN @stringtoconvert LIKE '%$6%' then REPLACE(@stringtoconvert, '$6', '''')
    WHEN @stringtoconvert LIKE '%$7%' THEN REPLACE(@stringtoconvert,'$7','&')
    ELSE @stringtoconvert END 
return @Return
end;


SELECT dbo.fn_convertDBChars('Jack $7 Jill') -- Returns Jack & Jill
SELECT dbo.fn_convertDBChars('O''Brian')  -- Returns O'Brian
SELECT dbo.fn_convertDBChars(fname) from dbo.table_name  -- This is how you would call your function on the column.

注意此处使用的转义字符用于转义单引号。你可以通过使用两次出现的单引号来逃避它。