Sql 用于确定字符串是否包含子字符串的用户定义函数
我有一段代码,它当前返回0,不管字符串是否包含子字符串。如果找到子字符串,则应返回1Sql 用于确定字符串是否包含子字符串的用户定义函数,sql,sql-server,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
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;
我还尝试在我的IF
语句中使用charindex
,但没有成功。我是不是错过了一些简单的东西
像这样测试:
SELECT dbo.checkletters('dLHLd');
使用
(@MESSAGE VARCHAR(max))
作为输入参数。或者不是指定最大长度,而是在函数中当前仅为1。这就是问题所在。修改您的函数,如下所示:
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;
问题出在您的输入参数中。您的函数可以重写为:
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(位运算符)。是sql server
还是mysql
?啊,这太尴尬了。为指出这一点干杯!