如何使“字符串像任何”%element_in_array%“

时间:2019-09-06 12:12:25

标签: sql sql-server sql-like

我有一个字符串,例如“ Caio; Lara; Dani; Jorge”。

我想进行以下查询:

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

但是我不知道来自字符串的值。 我试图将其转换为数组,但没有找到一种将字符串与数组中任何元素进行比较的方法。

2 个答案:

答案 0 :(得分:1)

首先;使用此功能在表格中拆分“,”分隔的字段:

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

上进行查看

然后,您可以将表与结果表连接起来:

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

答案 1 :(得分:0)

基本上,正确的解决方案是将值存储在列中,并以函数或临时表的形式提供服务。然后将其视为普通表或视图,并执行您想对其进行的任何类型的操作。

以下是一篇很好的文章,可供您参考:
https://primestudyhub.blogspot.com/comma-separated-values-in-sql