从表 person_details 中选择国家、姓名、排名
查询在语法上不正确。您不需要关键字 TABLE。做就是了:
select country, name, rank from person_details
严格来说,你的表没有规范化。您不应将多个值存储在单个列中。迟早你会看到性能问题。重新设计表格并将值存储在单独的列中永远不会太晚。
话虽如此,有很多方法可以将逗号分隔的字符串拆分为行。这是在CONNECT BY子句中使用REGEXP_SUBSTR和INSTR的一种简单方法:
SQL> WITH DATA AS(
2 select q'['india','USA','australia']' countries,
3 q'['tom', 'jill', 'jack']' names,
4 q'['first', 'third', 'fifth']' ranks
5 from dual
6 )
7 SELECT regexp_substr(translate(countries,'''',' '), '[^,]+', 1, LEVEL) countries,
8 trim(regexp_substr(translate(names,'''',' '), '[^,]+', 1, LEVEL)) names,
9 trim(regexp_substr(translate(ranks,'''',' '), '[^,]+', 1, LEVEL)) ranks
10 FROM DATA
11 CONNECT BY instr(countries, ',', 1, LEVEL - 1) > 0
12 /
COUNTRIES NAMES RANKS
------------------------- --------------------- -------------------------
india tom first
USA jill third
australia jack fifth
SQL>
我在我的文章ORACLE DELIMITED STRING MANIPULATION中演示了其他方法。