2014-02-13 119 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 

当数据变大,假设你继续通过提供国家的名字,你会指数状态属性进行搜索,并建议设计会帮助你。