2014-02-13 115 views
0

我有一個表稱爲國家擁有列如下圖所示選擇基於在條件

countryname statename 

USA   TEXAS 
INDIA  DELHI,MAHARASHTRA 
ENGLAND  KENT 

我想通過傳遞statename作爲參數在存儲選擇國家名稱的子字符串匹配的值功能。

相隔 但對的情況下,印度,statename有多個值「」你怎麼把地方條件選擇,使我得到countryname印度,但傳遞的參數是‘德潤’或「MAHARASHTRA 「不能同時

由於提前

+2

考慮規範化您的數據 – peterm

回答

2

爲什麼不使用什麼樣的?

例如,你這樣做:

DECLARE @stateName VARCHAR(MAX) = 'MAHARASHTRA'; 

SELECT countryName 
FROM table 
WHERE (',' || stateName || ',') LIKE '%,' || @stateName || ',%' 
+0

@peterm:因爲我在匹配前追加了逗號,所以應該處理缺少前導和後綴的逗號 – ChaseMedallion

+0

另一種類似的方法是:'WHERE INSTR(','|| table .stateName || ' '', '||:Statename的||',')> 0' –

0

使用此查詢,並讓我們知道結果

WITH country(countryname,statename) AS (
SELECT 'USA','TEXAS' FROM dual UNION ALL 
SELECT 'INDIA','DELHI,MAHARASHTRA' FROM dual UNION ALL 
SELECT 'ENGLAND','KENT' FROM dual) 
---------- 
--- End of data preparation 
---------- 
SELECT countryname 
from (SELECT countryname, regexp_substr(statename, '[^,]+', 1, level) statename 
     FROM country 
     CONNECT BY regexp_substr(statename, '[^,]+', 1, LEVEL) IS NOT NULL 
     AND PRIOR statename = statename 
     AND PRIOR sys_guid() IS NOT NULL) 
where statename = 'MAHARASHTRA'; 

輸出

| COUNTRYNAME | 
|-------------| 
|  INDIA | 
0

鑑於你已經決定使用RDBMS,你應該規範化數據。

建議設計是具有

COUNTRY  STATE 
INDIA  DELHI 
INDIA  MAHARASHTRA 
USA   TEXAS 

當數據變大,假設你繼續通過提供國家的名字,你會指數狀態屬性進行搜索,並建議設計會幫助你。