在SQL中使用正则表达式的问题

时间:2011-01-17 13:12:31

标签: sql regex oracle plsql

我有一个名为“data-description”的列,其中包含

等条目
Mumbai,Maharastra,India
London,London, Britain
Chandigarh,Haryana,India
Lahore, Punjab, Non-India

每行描述一个数据描述列的值。

现在我需要更新另一个包含三列

的表
<City> => <Citycode>   ---> Every City 
<Statename> => <Statename>
<Country>  => <Country>

我有一张表,其中包含City和City-Code之间的映射。现在我需要使用三个columsn Citycode,Statename,Country

创建另一个表

如何使用几个SQl语句并且不使用任何PL / SQL?

此外,行中的顺序可能不同。像一些行有订单城市,州,县。其他人可能有订单州,国家,城市。

1 个答案:

答案 0 :(得分:3)

您可以使用REGEXP_SUBSTR从源列中提取信息:

SQL>  WITH my_data AS (
  2      SELECT 'Mumbai,Maharastra,India' d FROM dual
  3      UNION ALL SELECT 'London,London, Britain' d FROM dual
  4      UNION ALL SELECT 'Chandigarh,Haryana,India' d FROM dual
  5      UNION ALL SELECT 'Lahore, Punjab, Non-India' d FROM dual
  6   )
  7   SELECT regexp_substr(d, '[^, ]+', 1, 1) City,
  8          regexp_substr(d, '[^, ]+', 1, 2) Statename,
  9          regexp_substr(d, '[^, ]+', 1, 3) Country
 10     FROM my_data;

CITY                      STATENAME                 COUNTRY
------------------------- ------------------------- -------------------------
Mumbai                    Maharastra                India
London                    London                    Britain
Chandigarh                Haryana                   India
Lahore                    Punjab                    Non-India