查询表以查找具有给定文本的记录

时间:2013-10-03 05:18:56

标签: sql sql-server select

我的表( 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

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

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

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

已更新

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

4 个答案:

答案 0 :(得分: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+'%'

答案 1 :(得分:2)

此处,仅提取序列中包含car, bus个标记的记录。

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

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

<强> SQL FIDDLE

答案 2 :(得分: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,%'

答案 3 :(得分:0)

这有效

SELECT * FROM TAG_DATA
      where TAGS like '%[BUS,CAR],[CAR,BUS]%'