0

现在我遇到了麻烦,不知道如何解决。

Declare @brand_id varchar(50) ='brand1, brand2'

SELECT related_brand_id FROM dbo.Category

=> result: Row 1: "brand1, brand3, brand5"
           Row 2: "brand3, brand5"
           Row 3: "brand5"
           Row 4: "brand2, brand5"
           ...

那么,如何使用参数@brand_id 包含 IN related_brand_id 来选择表 Category 中的所有行?

我的预期结果:

Row 1: "brand1, brand3, brand5"
Row 4: "brand2"
...
4

2 回答 2

0

在 SQL Server 2016 及更高版本中,您可以使用string_split

DECLARE @brand_id varchar(50) = 'brand1,brand2';

SELECT distinct C.*
FROM Category c
CROSS APPLY
    (SELECT VALUE FROM string_split(related_brand_id, ',')) s
JOIN
    (SELECT VALUE FROM string_split(@brand_id , ',')) v ON TRIM(s.value) = TRIM(v.value)

输出:

id | related_brand_id    
---+-------------------
 1 | brand1,brand3,brand5
 4 | brand2,brand5       

db<>在这里摆弄

于 2021-05-25T03:05:47.223 回答
0

如果用这两个相似的字符串替换您的搜索字符串:

Declare @brand_id1 varchar(50) = '%brand1%'
Declare @brand_id2 varchar(50) = '%brand2%'

然后,您可以使用以下代码选择包含这些字符串中的任何一个的所有行:

SELECT related_brand_id FROM dbo.Category
WHERE related_brand_id like @brand_id1 or related_brand_id like @brand_id2

这将返回您的预期结果。

于 2021-05-25T14:54:16.850 回答