我有这个代码,无论字符串是否包含子字符串,当前返回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');
答案 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(位运算符)。