我有一個表稱爲國家擁有列如下圖所示選擇基於在條件
countryname statename
USA TEXAS
INDIA DELHI,MAHARASHTRA
ENGLAND KENT
我想通過傳遞statename
作爲參數在存儲選擇國家名稱的子字符串匹配的值功能。
相隔 但對的情況下,印度,statename
有多個值「」你怎麼把地方條件選擇,使我得到countryname
印度,但傳遞的參數是‘德潤’或「MAHARASHTRA 「不能同時
由於提前
我有一個表稱爲國家擁有列如下圖所示選擇基於在條件
countryname statename
USA TEXAS
INDIA DELHI,MAHARASHTRA
ENGLAND KENT
我想通過傳遞statename
作爲參數在存儲選擇國家名稱的子字符串匹配的值功能。
相隔 但對的情況下,印度,statename
有多個值「」你怎麼把地方條件選擇,使我得到countryname
印度,但傳遞的參數是‘德潤’或「MAHARASHTRA 「不能同時
由於提前
爲什麼不使用什麼樣的?
例如,你這樣做:
DECLARE @stateName VARCHAR(MAX) = 'MAHARASHTRA';
SELECT countryName
FROM table
WHERE (',' || stateName || ',') LIKE '%,' || @stateName || ',%'
@peterm:因爲我在匹配前追加了逗號,所以應該處理缺少前導和後綴的逗號 – ChaseMedallion
另一種類似的方法是:'WHERE INSTR(','|| table .stateName || ' '', '||:Statename的||',')> 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 |
鑑於你已經決定使用RDBMS,你應該規範化數據。
建議設計是具有
COUNTRY STATE
INDIA DELHI
INDIA MAHARASHTRA
USA TEXAS
當數據變大,假設你繼續通過提供國家的名字,你會指數狀態屬性進行搜索,並建議設計會幫助你。
考慮規範化您的數據 – peterm