0
例如: 數據庫表1:如何在字符串中選擇多個模式?
| ColA |ColB|
| 1 |A1,A2,A3,A4,A5|
| 2 |B1,B2|
參數輸入:A4,A1,A2,A5
我想選擇第1行,因爲ColB
含有參數輸入的所有值。
怎麼辦?
例如: 數據庫表1:如何在字符串中選擇多個模式?
| ColA |ColB|
| 1 |A1,A2,A3,A4,A5|
| 2 |B1,B2|
參數輸入:A4,A1,A2,A5
我想選擇第1行,因爲ColB
含有參數輸入的所有值。
怎麼辦?
首先,@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
商店中的數據以SQLish方式 - 每個ColA和ColB值包含一行的聯結表。 –