我有一个名为country的表,其中包含如下所示的列
countryname statename
USA TEXAS
INDIA DELHI,MAHARASHTRA
ENGLAND KENT
我想通过将statename
作为参数传递到存储函数来选择国家/地区名称。
但就印度而言,statename
有多个值由','
如何将select条件放在select中,以便我将countryname
作为INDIA,但传递的参数是'DELHI'或'MAHARASHTRA'而不是两者
先谢谢
答案 0 :(得分:2)
为什么不使用LIKE?
例如,你这样做:
DECLARE @stateName VARCHAR(MAX) = 'MAHARASHTRA';
SELECT countryName
FROM table
WHERE (',' || stateName || ',') LIKE '%,' || @stateName || ',%'
答案 1 :(得分: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 |
答案 2 :(得分:0)
鉴于您决定使用RDBMS,您应该规范化数据。
建议的设计是
COUNTRY STATE
INDIA DELHI
INDIA MAHARASHTRA
USA TEXAS
当您的数据变大时,假设您通过提供状态名称继续搜索,您将索引STATE属性,并且建议的设计可以帮助您。