2013-10-03 21 views
0

我的表格中有3條記錄(TAG_DATA)列(TAGS)。查詢表格以查找給定文本的記錄

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

回答

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+'%' 
+0

謝謝您的回答。我不能用這個。因爲我在我的應用程序中從多個選擇組合框中選擇標籤。所以我需要在那裏給文本。所以不能使用'和'或'or'。 – Bishan

+0

請檢查我編輯的答案,我想這是你的要求。 – TechDo

+0

Thanks.I'll檢查它:) – Bishan

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,%' 
+0

感謝您的回答。我不能用這個。因爲我在我的應用程序中從多個選擇組合框中選擇標籤。所以我需要在那裏給文本。所以不能使用'和'。 – Bishan

2

這裏,只有記錄順序爲car, bus的記錄纔會被提取。

對於期望的結果,下面的查詢是有益的:

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

SQL FIDDLE

+0

感謝您的回答。我不能用這個。因爲我在我的應用程序中從多個選擇組合框中選擇標籤。所以我需要在那裏給文本。所以不能使用'和'。 – Bishan

+0

但是我們使用'OR'命令不是'AND' – Pooh

+0

對不起。也不能使用'OR'。 – Bishan

0

這工作

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