我有一个表称为国家拥有列如下图所示选择基于在条件
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