【问题标题】:If a value contains a certain character then do this or else do this如果一个值包含某个字符,则执行此操作,否则执行此操作
【发布时间】:2023-03-09 07:15:02
【问题描述】:

我正在尝试编写一个函数来处理列值并返回值以及“@”符号之前的所有内容。

到目前为止,我已经通过使用以下代码做到了这一点:

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

函数的示例结果 - 参数输入 = ABC@123,返回 = ABC。

这可行,但随后仅返回列包含@ 值的每个结果,并且省略了不带@ 的其余结果。 IE。 ABC@123 返回 ABC 但 XYZ 不返回任何内容。

如何修改代码以提供两组值?我想我必须在其中添加一个“IF”语句,但我不确定如何编写它以获得我想要的结果。

提前非常感谢:)

迈克

【问题讨论】:

  • 也许你应该为你用来编写函数的 LANGUAGE 添加一个标签?你不觉得像sql 这样的标签可能合适吗?
  • 你用的是什么数据库?

标签: sql sql-server function if-statement substring


【解决方案1】:

你快到了:

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

【讨论】:

    【解决方案2】:

    你可以用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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 2021-10-27
      • 2021-02-10
      • 2014-02-17
      • 2016-05-17
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      相关资源
      最近更新 更多