0

我的表(TAG_DATA)列(TAGS)中有以下 3 条记录。

car,bus,van
bus,car,ship,van
ship

我写了一个查询来获取具有carbus如下的记录。

SELECT * FROM TAG_DATA
  where TAGS like '%car, bus%'

但上面的查询只返回下面的记录。

car,bus,van

但我需要得到如下输出。因为这两个记录都有car并且bus

car,bus,van
bus,car,ship,van

我该如何为此编写查询?我正在使用 MS SQL Server。

更新

我在我的应用程序中从多选组合框中选择标签。所以我需要在其中给出文字。所以不能在我的查询中使用and/ 。or

4

4 回答 4

2

请试试:

DECLARE @input NVARCHAR(MAX)='car, bus'

SELECT DISTINCT B.*
FROM(
    SELECT 
         LTRIM(Split.a.value('.', 'VARCHAR(100)')) AS CVS  
    FROM  
    (
         SELECT
            CAST ('<M>' + REPLACE(@input, ',', '</M><M>') + '</M>' AS XML) AS CVS  
    ) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a) 
)x  INNER JOIN TAG_DATA b on TAGS like '%'+CVS+'%'
于 2013-10-03T05:21:14.367 回答
2

在这里,只会car, bus获取具有顺序标签的记录。

对于所需的结果,以下查询是有益的:

SELECT * FROM TAG_DATA
where TAGS like '%car, bus%' or  TAGS like '%bus, car%'

SQL 小提琴

于 2013-10-03T05:24:15.163 回答
0
SELECT * FROM TAG_DATA
  where TAGS like '%car,%' and TAGS like  '%bus,%'

我故意使用逗号。这取决于您的数据以下查询也至少适用于上面的示例。

SELECT * FROM TAG_DATA
  where TAGS like '%car,%' and TAGS like  '%bus,%'
于 2013-10-03T05:22:21.030 回答
0

这有效

SELECT * FROM TAG_DATA
      where TAGS like '%[BUS,CAR],[CAR,BUS]%'
于 2013-10-03T06:12:08.543 回答