Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于确定字符串是否包含子字符串的用户定义函数_Sql_Sql Server - Fatal编程技术网

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

Sql 用于确定字符串是否包含子字符串的用户定义函数,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

我有一段代码,它当前返回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;
我还尝试在我的
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
?啊,这太尴尬了。为指出这一点干杯!