基于匹配where条件中的子字符串来选择值

时间:2014-02-13 04:29:49

标签: oracle

我有一个名为country的表,其中包含如下所示的列

countryname  statename 

 USA         TEXAS
INDIA        DELHI,MAHARASHTRA
ENGLAND      KENT

我想通过将statename作为参数传递到存储函数来选择国家/地区名称。 但就印度而言,statename有多个值由','

分隔

如何将select条件放在select中,以便我将countryname作为INDIA,但传递的参数是'DELHI'或'MAHARASHTRA'而不是两者

先谢谢

3 个答案:

答案 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属性,并且建议的设计可以帮助您。