如何制作 "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 + '%'
我有一个像 "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 + '%'