代码之家  ›  专栏  ›  技术社区  ›  alice7

需要在sql中创建一个函数来查找字符串

  •  1
  • alice7  · 技术社区  · 14 年前

    我正在试着写一个函数,它能告诉我在第二秒之后是否有什么东西;在字符串中还是不是。为了示例:示例字符串为“2:00AM;3:00PM;”。因此,本例中的函数需要返回false。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Will A    14 年前

    假设总是有第二个,而没有第三个,这应该是可行的。。。

    CREATE FUNCTION dbo.fn_Bob(@str VARCHAR(20)) RETURNS BIT
    BEGIN
      RETURN CASE WHEN @str LIKE '%;' THEN 0 ELSE 1 END
    END
    
        2
  •  0
  •   Dustin Laine    14 年前

    CHARINDEX 有一个可选的参数来选择起始位置,所以找到“;”的第一个索引,并添加1,从下一个字符开始,然后检查下一个索引,长度应该更长。

    DECLARE @stringToTest nvarchar(100)
    SET @stringToTest = '2:00AM;3:00PM;';
    IF(LEN(@stringToTest) > CHARINDEX(';', @stringToTest, CHARINDEX(';', @stringToTest) + 1))
     BEGIN
      PRINT 'Yes'
     END
    ELSE
     BEGIN
      PRINT 'No'
     END
    
        3
  •  0
  •   Lester S    14 年前
    create function [dbo].[udf_IsValidCheck](@Value varchar(64)) returns bit
    as
    begin
        declare @IsValidCheck bit
        select @IsValidCheck = (case when charindex( ';', @Value, charindex(';', @Value) + 1) > 0 
                                                and charindex( ';', @Value, charindex(';', @Value) + 1) < len(@Value) then 1
                                        else 0 end)
        return @IsValidCheck
    end
    

    '2:00AM;3:00PM;' --returns 0
    
    '2:00AM;3:00PM' --returns 0
    
    '2:00AM;3:00PM;3rdValue;4thValue;' --returns 1
    
    '2:00AM;3:00PM;3rdValue;' --returns 1
    
    '2:00AM;3:00PM;3rdValue' --returns 1
    
    '2:00AM;' -- returns 0
    
    '2:00AM;' -- returns 0