我的表( TAG_DATA )列( TAGS )列中有3条以下记录。
car,bus,van
bus,car,ship,van
ship
我写了一个查询来获取具有car
和bus
的记录,如下所示。
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
。
答案 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]%'