我正在尝试编写一个处理列值的函数,并在“@”符号之前返回值。
到目前为止,我已使用以下代码设法完成此操作:
Create Function fnStaffCodeConvert (@staffcode varchar(10))
Returns varchar(4)
AS
BEGIN
DECLARE @staffinitals varchar(4)
SET @staffinitals = (SELECT substring(@staffcode,0, CHARINDEX('@',@staffcode)))
Return @staffinitials
END
函数的示例结果 - 参数in = ABC@123
,返回= ABC
。
这可以工作,但后来只返回列中包含@
值的每个结果,并且省略了没有@
的其余结果。即ABC@123
会返回ABC
,但XYZ
不会返回任何内容。
如何修改代码以给我两组值?我想我必须在那里放一个'IF'语句,但我不确定如何写它来得到我想要的结果。
非常感谢提前:)
麦克
答案 0 :(得分:0)
你快到了:
ALTER FUNCTION fnStaffCodeConvert (@staffcode varchar(10))
RETURNS VARCHAR(4)
AS
BEGIN
DECLARE @staffinitals AS VARCHAR(4)
if CHARINDEX('@',@staffcode) <> 0
SET @staffinitals = (SELECT substring(@staffcode,0, CHARINDEX('@',@staffcode)))
Else
SET @staffinitals = @staffcode
RETURN @staffinitals
END
答案 1 :(得分:0)
您可以使用case
:
Create Function fnStaffCodeConvert (@staffcode varchar(10))
Returns varchar(4);
AS
BEGIN
DECLARE @staffinitals varchar(4);
SET @staffinitals = (SELECT (case when @staffcode like '%@%'
then substring(@staffcode,0, CHARINDEX('@',@staffcode)
else @staffcode
end));
Return @staffinitials;
END
但是等等,你可以进一步简化:
Create Function fnStaffCodeConvert (@staffcode varchar(10))
Returns varchar(4)
AS
BEGIN
DECLARE @staffinitals varchar(4)
SELECT @staffinitials = (case when @staffcode like '%@%'
then substring(@staffcode,0, CHARINDEX('@',@staffcode)
else @staffcode
end);
Return @staffinitials;
END;