2017-07-14 55 views
0

例如: 數據庫表1:如何在字符串中選擇多個模式?

| ColA |ColB| 
    | 1 |A1,A2,A3,A4,A5| 
    | 2 |B1,B2| 

參數輸入:A4,A1,A2,A5

我想選擇第1行,因爲ColB含有參數輸入的所有值。

怎麼辦?

+3

商店中的數據以SQLish方式 - 每個ColA和ColB值包含一行的聯結表。 –

回答

2

首先,@Gordon Linoff說你需要將你的數據改爲SQLish,即不要逗號分隔數據,而是將它們分隔成新的行。這可以通過以下方式實現:

注意我已經使用MS SQL,其他版本的SQL將有不同的答案,但方法應該保持不變。

樣品表

CREATE TABLE YourData (ColA int, ColB varchar(max)) 
INSERT INTO YourData VALUES (1,'A1,A2,A3,A4,A5') 
INSERT INTO YourData VALUES (2,'B1,B2') 

查詢(遞歸公用表表達式)

;WITH CTE (ColA, ColB_new, ColB) 
AS 
(
SELECT 
ColA 
,LEFT(ColB,CHARINDEX(',',ColB+',')-1) 
,STUFF(ColB,1,CHARINDEX(',',ColB+','),'') 
FROM YourData 
UNION ALL 
SELECT 
ColA 
,LEFT(ColB,CHARINDEX(',',ColB+',')-1) 
,STUFF(ColB,1,CHARINDEX(',',ColB+','),'') 
FROM CTE 
WHERE ColB >'' 
) 
SELECT 
ColA, ColB_new 
FROM CTE 
ORDER BY ColA 

所以,如果你這個去:

| ColA |ColB| 
    | 1 |A1,A2,A3,A4,A5| 
    | 2 |B1,B2| 

要這樣:

ColA ColB_new 
1   A2 
1   A3 
1   A4 
1   A5 
1   A1 
2   B1 
2   B2 

然後,您添加一個簡單的WHERE子句,例如WHERE ColB_new IN('A4','A1','A2','A5')

如果你想要得到的信息反饋有關它是如何在第一個表(YourData):

| ColA |ColB| 
    | 1 |A1,A2,A3,A4,A5| 

,那麼你可以在可樂

做了兩個表 JOIN
相關問題