sql - 将 mainframe 字节邮政编码转换为 varchar 或字符串

我有一个使用字节编码邮政编码的 DB2 database。有人告诉我,由于空间限制, mainframe 读取标准化的美国邮政编码并将其编码为字节格式(使用 COBOL)。 DB2 database 将编码的邮政编码读入一个 VARCHAR(9) 字段。有什么方法可以获取 DB2 输出并将其转换回原始邮政编码以表示数据,就好像它以普通 5-4 格式的邮政编码一样?

理想情况下,我的解决方案是在 SQL 中,但 python 或 C# 也会有所帮助。谢谢你。

以下是来自 mainframe 的编码邮政编码的一些示例。

134771824 地址是康涅狄格州哈特福德的,我希望它是 06103。

122900373 贝尔法斯特我 04915

在这个用例中,我正在处理后端 Teradata 仓库。我从 IBM DB2 database 获取这些信息,原始数据存储在 IBM COBOL mainframe 中。 mainframe 不保留原始邮政编码。

似乎我应该能够将 9 个数字操作回 5 个字符是目标

回答1

一个字符邮政编码将占用 9 个字节的字符数据(因此是 VARCHAR(9)),所以问题是承载编码邮政编码的列数据类型是什么?

鉴于缺少细节,这是推测,但我认为这是一个合理的有根据的猜测,即他们将 value 存储为 COBOL COMP-3 类型,该类型在 IBM Z 上压缩为十进制。下面是字符,然后是十六进制表示在他们之下。

Characters    123456789    
Hex Values    FFFFFFFFF
              123456789

Characters       ∨←        
Hex Values    13579
              2468F

可以看到第一个例子中的字符 values 占用了 9 个字节,而第二个例子中的字节数是 5。

根据您的问题,您可以:

COBOL

77 编码-ZIP PIC 9(9) 使用 COMP-3。 77 CHAR-ZIP PIC 9(9)。

将 CHAR-ZIP 移动到 ENCODED-ZIP。

阅读 Db2 行并将 zip 放入 CHAR-ZIP。移动它以获取 Db2 VARCHAR(9) 并将其放置在 PIC 9(9) 字段中,然后将其移动到 PIC 9(9) COMP-3。

请参阅此 [StackOverflow 答案](https://stackoverflow.com/questions/33011428/packed-decimal-to-zoned-decimal-or-decimal-conversion-python),因为它更广泛地解决了您的问题

相似文章

最新文章