我有一个字符串,例如“ Caio; Lara; Dani; Jorge”。
我想进行以下查询:
SELECT * FROM Cliente WHERE nome LIKE '%Caio%'
OR nome LIKE '%Lara%'
OR nome LIKE '%Dani%'
OR nome like '%Jorge%';
但是我不知道来自字符串的值。 我试图将其转换为数组,但没有找到一种将字符串与数组中任何元素进行比较的方法。
答案 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