首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗留DB2 SQL查询连接简化

遗留DB2 SQL查询连接简化
EN

Stack Overflow用户
提问于 2019-02-26 20:24:14
回答 2查看 67关注 0票数 0

我们在AS/400系统上安装了一个DB2数据库。(是的,IBM给它打了几种改名)

当我在字符串部件上进行连接时,您可以看到冗余。

我已经看到了一些解决方案,但请记住,由于我们的数据库是一个相当古老的非标准版本的DB2,因此许多方案似乎无法工作。有没有办法减少CHAR(19000000 + a10)计算中的冗余?它工作,但它击中转换比它需要的更多的次数。

代码语言:javascript
复制
SELECT DISTINCT pdk01.a00 AS POLICY, 
                    pdk01.b27_mins_name AS "INS NAME", 
                    substr(CHAR(19000000 + a10), 1, 4) || '/' || substr(CHAR(19000000 + a10), 5, 2) || '/' || substr(CHAR(19000000 + a10), 7, 2) as "Orig Eff Date",                    
                    substr(CHAR(19000000 + a09), 1, 4) || '/' || substr(CHAR(19000000 + a09), 5, 2) || '/' || substr(CHAR(19000000 + a09), 7, 2) AS "Expire Date", 
                    pdk01.a21_mtotal_prem AS PREMIUM 
    FROM   mudata.pdk01 AS PDK01 
           INNER JOIN mudata.pdk04 AS PDK04 
                   ON pdk01.a00_m1_pol_num = pdk04.a00_m4_pol_num 
    WHERE  pdk01.a11_mnext_act_code <> 'P' 
           AND pdk04.b83 = '91342' 
    ORDER  BY pdk01.a00 asc;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-26 20:59:26

从v6.1开始,您可以使用TIMESTAMP_FORMAT函数将字符串转换为时间戳,然后再从那里转换为您选择的任何格式。下面是如何将包含180205 (YYMMDD)的字符串转换为时间戳。

代码语言:javascript
复制
TIMESTAMP_FORMAT(field, 'YYMMDD')

要将其转换为日期字段,可以这样做:

代码语言:javascript
复制
DATE(TIMESTAMP_FORMAT(field, 'YYMMDD'))

若要将其转换为带有分隔符的字符字段,请执行以下操作:

代码语言:javascript
复制
CHAR(DATE(TIMESTAMP_FORMAT(field, 'YYMMDD')), ISO)

当然,ISO使用-而不是/作为分隔符,所以您需要用:

代码语言:javascript
复制
REPLACE(CHAR(DATE(TIMESTAMP_FORMAT(field, 'YYMMDD')), ISO), '-', '/')

如果您的版本早于v6.1,那么您只需处理拥有一个12+年老操作系统所带来的后果。

票数 3
EN

Stack Overflow用户

发布于 2019-02-26 21:18:34

在获得TIMESTAMP_FORMAT()之前,马克的回答提到.

最好的解决方案是创建一个用户定义函数(UDF),为您处理转换。

您可以选择自己的版本,也可以找到开源版本。

Alan的iDate代码是一组用于日期转换的完整UDF;可在此下载

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54893532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档