首页 > 解决方案 > 使用 DB2 SQL 将 1 列解析为 3 列

问题描述

使用 DB2 for z/OS 10,我在一个表中有一个列 (ADDRESS3),其中包含城市、州和邮政编码都在一个列中。但是,格式有点“自由格式”。(见下面的代码)

我可以通过逗号前的所有内容成功解析城市。仅使用 DB2 SQL,我将如何解析出状态和邮政编码?

SELECT ADDRESS3,
       TRIM(SUBSTR(ADDRESS3,1,LOCATE(',', ADDRESS3)-1)) AS CITY
  FROM MYTABLE

ADDRESS3                            CITY         
----------------------------------  -------------
GRANADA HILLS       ,CA 91344       GRANADA HILLS
SIMI VALLEY         ,CA 93065       SIMI VALLEY  
BUENA PARK          ,CA 90621       BUENA PARK   
SHERMAN OAKS        ,CA 91423       SHERMAN OAKS 
GLENDALE            ,CA 91203-2089  GLENDALE     
VENTURA             ,CA 93002       VENTURA      
HAWTHORNE           ,CA 90250       HAWTHORNE    
PASADENA            ,CA 91185-2594  PASADENA     
BEVERLY HILLS       ,CA 90211       BEVERLY HILLS
ARCADIA             ,CA 91007       ARCADIA      
WALNUT CREEK        ,CA 94596       WALNUT CREEK 
INDEPENDANCE        ,CA 93526       INDEPENDANCE 
LOS ANGELES         ,CA 90017       LOS ANGELES  

最终,我希望查询结果如下所示:

CITY          STATE ZIP
------------- ----- -----
GRANADA HILLS CA    91344
SIMI VALLEY   CA    93065
BUENA PARK    CA    90621
SHERMAN OAKS  CA    91423
GLENDALE      CA    91203
VENTURA       CA    93002
HAWTHORNE     CA    90250
PASADENA      CA    91185
...

谢谢!

标签: sqldb2

解决方案


我认为你需要这个假设格式总是相同的。

  SELECT 
       TRIM(
         SUBSTR(
           SUBSTR(MYTABLE.A, LOCATE(',', MYTABLE.A) + 1)
           , 1
           , POSITION(' ' , SUBSTR(MYTABLE.A, LOCATE(',', MYTABLE.A) + 1))
         )
       ) AS STATE
    ,  TRIM(
           SUBSTR(
             SUBSTR(MYTABLE.A, LOCATE(',', MYTABLE.A) + 1)
           , POSITION(' ' , SUBSTR(MYTABLE.A, LOCATE(',', MYTABLE.A) + 1))
         ) 
       ) AS ZIP
  FROM MYTABLE

使用这些值将演示结果转换为这些结果

测试数据

  VALUES
    ('GRANADA HILLS       ,CA 91344')
  , ('SIMI VALLEY         ,CA 93065') 
  , ('GLENDALE            ,CA 91203-2089')
  , ('SIMI VALLEY         ,CA    93065')  
  , ('SIMI VALLEY         ,CA    93065') 
  , ('GLENDALE            ,CA    91203-2089') 

结果

STATE   ZIP
CA      91344
CA      93065
CA      91203-2089
CA      93065
CA      93065
CA      91203-2089

演示


推荐阅读