Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 使用自定义项基于字符串填充一系列1和0_Sql_Variables_Udf - Fatal编程技术网

Sql 使用自定义项基于字符串填充一系列1和0

Sql 使用自定义项基于字符串填充一系列1和0,sql,variables,udf,Sql,Variables,Udf,我在sql中有一个表,它有一个名为[message]的列。我需要使用一个UDF来填充1或0,取决于该子字符串是否包含“LHL” 我的代码: create function dbo.generate ( @result varchar(max) ) returns int as begin declare @message varchar(max) = (Select [message] from POST) if (PAT

我在sql中有一个表,它有一个名为[message]的列。我需要使用一个UDF来填充1或0,取决于该子字符串是否包含“LHL”

我的代码:

    create function dbo.generate 
    (
    @result varchar(max)
    )
    returns int
    as
    begin
    declare @message varchar(max) = (Select [message] from POST)
    if (PATINDEX('%LHL%', @message) > 0)
    begin
    set @result = '1'
    end
    else 
    set @result = '0'
    return @result
    end
    go

    select dbo.generate('%LHL%')
有了这个,我得到了一个错误:

Msg 512,16级,状态1,第1行 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

我只需要一个有0和1的列表。我可以使用PATINDEX生成一个列表,该列表可以告诉我LHL的开始位置,但如果如图所示存在,则似乎无法将数字更改为1。还必须使用UDF而不是CTE

    with cte as
    (select [message] from POSt
    ), 
    pos as
    (select patindex('%LHL%',[message]) pos, [message] from cte
    union all
    select pos+patindex('%LHL%',substring([message], pos+1, len([message]))) pos, [message] from pos
    where patindex('%LHL%',substring([message], pos+1, len([message])))>0
    )
    select pos from pos

SELECT语句declare@message varcharmax=SELECT[message]from POST用于设置变量@message的值返回多个值。限制SELECT语句一次只返回一个值,以便它可以存储在“@message”变量中。

SELECT语句声明@message varcharmax=SELECT[message]from POST用于设置变量@message的值返回多个值。限制SELECT语句一次只返回一个值,以便它可以存储在“@message”变量中。

SELECT语句声明@message varcharmax=SELECT[message]from POST用于设置变量@message的值返回多个值。限制SELECT语句一次只返回一个值,以便它可以存储在“@message”变量中。

SELECT语句声明@message varcharmax=SELECT[message]from POST用于设置变量@message的值返回多个值。限制SELECT语句一次只返回一个值,以便将其存储在“@message”变量中。

为什么不使用EXISTS子句检查行的存在性

IF(EXISTS(Select [message] from POST WHERE [message] LIKE '%LHL%'))
BEGIN
    SET @result = '1'
END
ELSE
BEGIN
    SET @result = '0'
END

    RETURN @result

根据您想要实现的目标,即检查LHL是否存在,这是最佳选择。但是,如果您想通过将所有位置设置为字符串,则首先将整个列数据转换为字符串,然后进行搜索。

为什么不使用EXISTS子句检查行的存在性

IF(EXISTS(Select [message] from POST WHERE [message] LIKE '%LHL%'))
BEGIN
    SET @result = '1'
END
ELSE
BEGIN
    SET @result = '0'
END

    RETURN @result

根据您想要实现的目标,即检查LHL是否存在,这是最佳选择。但是,如果您想通过将所有位置设置为字符串,则首先将整个列数据转换为字符串,然后进行搜索。

为什么不使用EXISTS子句检查行的存在性

IF(EXISTS(Select [message] from POST WHERE [message] LIKE '%LHL%'))
BEGIN
    SET @result = '1'
END
ELSE
BEGIN
    SET @result = '0'
END

    RETURN @result

根据您想要实现的目标,即检查LHL是否存在,这是最佳选择。但是,如果您想通过将所有位置设置为字符串,则首先将整个列数据转换为字符串,然后进行搜索。

为什么不使用EXISTS子句检查行的存在性

IF(EXISTS(Select [message] from POST WHERE [message] LIKE '%LHL%'))
BEGIN
    SET @result = '1'
END
ELSE
BEGIN
    SET @result = '0'
END

    RETURN @result

根据您想要实现的目标,即检查LHL是否存在,这是最佳选择。但是,如果您希望通过将所有位置设置为字符串,则首先将整个列数据转换为字符串,然后进行搜索。

您也可以尝试为“POST”表的每一行调用函数。通过这种方式,您可以一次从[message]列传递一个值。您可以在函数中使用该特定值调用“@message”变量,并且可以为每一行返回“1”或“0”。您还可以尝试为“POST”表的每一行调用函数。通过这种方式,您可以一次从[message]列传递一个值。您可以在函数中使用该特定值调用“@message”变量,并且可以为每一行返回“1”或“0”。您还可以尝试为“POST”表的每一行调用函数。通过这种方式,您可以一次从[message]列传递一个值。您可以在函数中使用该特定值调用“@message”变量,并且可以为每一行返回“1”或“0”。您还可以尝试为“POST”表的每一行调用函数。通过这种方式,您可以一次从[message]列传递一个值。您可以在函数中使用该特定值创建“@message”变量,并且可以为每行返回“1”或“0”。