我正在尝试在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;
我很感激任何建议。
答案 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.
注意此处使用的转义字符用于转义单引号。你可以通过使用两次出现的单引号来逃避它。