我有一张表格,其中包含有关产品的所有信息。我需要列出特定列中具有匹配关键字(在本例中为品牌名称)的所有文章。是否可以使用我可以用于此操作的所有品牌名称来启动某种“列表”?所有品牌的chaning OR看起来都不错。
在第二步中,我只需要在第一步中的关键字之前查看所有不包含特定字序的文章。
DECLARE @brand NVARCHAR =
'bmw, toyota, mercedes'
SELECT [Artikelnum]
FROM [dbo].[LAGER]
WHERE [XWebtexke] like '%' + @brand +'%' AND [XWebtexke] NOT LIKE '%suited for%'
GO
这就是我到目前为止所得到的,但它不能按照我需要的方式工作。
答案 0 :(得分:0)
DECLARE @brand NVARCHAR =
'bmw, toyota, mercedes'
select * from (
SELECT [Artikelnum]
FROM [dbo].[LAGER]
WHERE [XWebtexke] NOT LIKE '%suited for%' )t4
WHERE [XWebtexke] like '%' + @brand +'%'
GO
答案 1 :(得分:0)
DECLARE @brand NVARCHAR =
'bmw, toyota, mercedes'
select * from (
SELECT [Artikelnum]
FROM [dbo].[LAGER]
WHERE [XWebtexke] NOT LIKE '%suited for%' )t4
WHERE t4.[XWebtexke] like '%' + @brand +'%'
GO
答案 2 :(得分:0)
意识到您需要匹配所有关键字。这是解决方案。
您需要拆分品牌变量,试试这个:
DECLARE @brand NVARCHAR(200) = 'bmw, toyota, mercedes'
;WITH CTE as
(
SELECT '%'+ t.c.value('.', 'VARCHAR(2000)')+'%' val
FROM (
SELECT x = CAST('<t>' +
REPLACE(@brand, ', ', '</t><t>') + '</t>' AS XML)
) a
CROSS APPLY x.nodes('/t') t(c)
)
SELECT [Artikelnum]
FROM [dbo].[LAGER]
WHERE
not exists(SELECT * FROM CTE WHERE [XWebtexke] not like val)
and [XWebtexke] NOT LIKE '%suited for%'
我假设逗号后面总是有空格,如果情况并非如此,您可以轻松调整代码。
在sqlserver 2016中,您可以使用STRING_SPLIT而不是我的回答中使用的拆分