sql - 使用 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
...
谢谢!
解决方案
我认为你需要这个假设格式总是相同的。
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
看演示
推荐阅读
- matlab - 在psychtoolbox matlab中将一个屏幕分成几个屏幕
- list - 给定一个字符串,获取元组列表(字符,字符连续出现多少次) - Haskell
- wordpress - 将自定义 wordpress 主题上传到网站而不是当前主题
- javascript - 在 javascript 中找不到非异步函数
- reactjs - 如何在 React 中将 JWT 发送到后端?
- visual-studio-code - 是否有 API 可以将项目添加到排水沟上下文菜单?
- c++ - с++ winforms.dataGridView。如何为表格单元格着色?
- c++ - C++ 使用向量对读取数据类型字符串 int 和 double
- assembly - div 如何使用定点算术在汇编语言中发挥作用?
- python - 你如何像循环一样重新运行两个python脚本