用户定义函数,用于确定字符串是否包含子字符串

时间:2015-08-31 04:43:41

标签: sql sql-server

我有这个代码,无论字符串是否包含子字符串,当前返回0。如果找到子字符串,它应该返回1。

CREATE FUNCTION dbo.checkLetters (@MESSAGE VARCHAR)
RETURNS INTEGER
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
    DECLARE @value INTEGER;
    IF @MESSAGE LIKE '%findMe%'
        SET @value = 1
    ELSE
        SET @value = 0
    RETURN @value
END;

我也尝试在charindex声明中使用IF无效。我在这里错过了一些简单的东西吗?

如此测试:

SELECT dbo.checkletters('dLHLd');

3 个答案:

答案 0 :(得分:4)

使用(@MESSAGE VARCHAR(max))作为输入参数。或者代替max指定长度,目前在你的函数中只有1.这就是问题。

答案 1 :(得分:0)

修改您的功能,如下所示:

ALTER FUNCTION dbo.checkLetters (@MESSAGE VARCHAR(max))
RETURNS INTEGER
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
   DECLARE @value INTEGER;
   DECLARE  @ExpressionToFind VARCHAR(50)
   SET @ExpressionToFind = 'findme'
   IF @MESSAGE  LIKE '%' + @ExpressionToFind + '%'
    SET @value = 1
ELSE
    SET @value = 0
  RETURN @value
END;

问题出在您的输入参数中。

答案 2 :(得分:0)

您的功能可以改写为:

CREATE FUNCTION dbo.checkLetters (@MESSAGE VARCHAR(MAX))
RETURNS BIT
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
    RETURN CAST(CHARINDEX('findMe', @MESSAGE) AS BIT);
END

CHARINDEX将在给定字符串中找到@MESSAGE的位置,如果它高于1,则输出1(位运算符)。