使用关键字列表

时间:2017-04-25 08:50:40

标签: sql sql-server

我有一张表格,其中包含有关产品的所有信息。我需要列出特定列中具有匹配关键字(在本例中为品牌名称)的所有文章。是否可以使用我可以用于此操作的所有品牌名称来启动某种“列表”?所有品牌的chaning OR看起来都不错。

在第二步中,我只需要在第一步中的关键字之前查看所有不包含特定字序的文章。

 DECLARE @brand NVARCHAR = 
    'bmw, toyota, mercedes'
SELECT [Artikelnum]
FROM [dbo].[LAGER]
  WHERE [XWebtexke] like '%' + @brand +'%' AND [XWebtexke] NOT LIKE '%suited for%' 
  GO

这就是我到目前为止所得到的,但它不能按照我需要的方式工作。

3 个答案:

答案 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而不是我的回答中使用的拆分