如何制作 "String like any "%element_in_array%"

How to make "String like any "%element_in_array%"

我有一个像 "Caio;Lara;Dani;Jorge" 这样的字符串。

我想进行查询:

SELECT * FROM Cliente WHERE nome LIKE '%Caio%' 
                         OR nome LIKE '%Lara%' 
                         OR nome LIKE '%Dani%' 
                         OR nome like '%Jorge%';

但我不知道字符串中的值。 我试图将它转换成一个数组,但我没有找到一种方法可以将字符串与数组中的任何元素进行比较。

基本上正确的解决方案是将值存储在列中并以函数或临时的形式提供它table。然后将其视为正常 table 或查看并执行您想对其执行的任何类型的操作。

这里有一篇很好的文章可以做这样的事情,供大家参考:
https://primestudyhub.blogspot.com/comma-separated-values-in-sql

首先;使用此函数将您的“,”分隔字段拆分为 table:

CREATE FUNCTION [dbo].[fn_split_string_to_column] (
    @string NVARCHAR(MAX),
    @delimiter CHAR(1)
    )
RETURNS @out_put TABLE (
    [column_id] INT IDENTITY(1, 1) NOT NULL,
    [value] NVARCHAR(MAX)
    )
AS
BEGIN
    DECLARE @value NVARCHAR(MAX),
        @pos INT = 0,
        @len INT = 0

    SET @string = CASE 
            WHEN RIGHT(@string, 1) != @delimiter
                THEN @string + @delimiter
            ELSE @string
            END

    WHILE CHARINDEX(@delimiter, @string, @pos + 1) > 0
    BEGIN
        SET @len = CHARINDEX(@delimiter, @string, @pos + 1) - @pos
        SET @value = SUBSTRING(@string, @pos, @len)

        INSERT INTO @out_put ([value])
        SELECT LTRIM(RTRIM(@value)) AS [column]

        SET @pos = CHARINDEX(@delimiter, @string, @pos + @len) + 1
    END

    RETURN
END

但是在SQL-Server 2016及以上你可以使用函数:STRING_SPLIT() 您可以在 this site

上查看

然后您可以加入您的 table 结果 table:

select * FROM Cliente
INNER JOIN 
(
    SELECT Value 
    FROM dbo.[fn_split_string_to_column]('Caio;Lara;Dani;Jorge',';') 
)tb
ON name LIKE '%' + Value + '%'