DB2 SQL将字段解释为其他CCSID

时间:2015-08-04 20:51:24

标签: sql db2

因为AS400,我的DSPJRN上有一个文件,我想查看JOESD字段中的一些数据,这是来自日记的后期图像文件。这被定义为CCSID = 65535的char。我想这是因为它是包含ccsid和数字字段的整个记录​​。

我可以使用substr()从原始文件中获取实际字段。

在原始文件中,列定义为graphic(10) ccsid 13488。多数民众赞成UCS-2
如果我hex(substr(joesd,522,20))我得到004100530044...的结果,依此类推,因此我知道它是正确的数据,但我无法将其显示为&# 39; ASD ...'

我尝试了graphic(substr(joesd,522,20),10,13488),但却出错the conversion from ccsid 65535 to 13488 isn't valid。我不想转换它,但将其解释为其他ccsid

1 个答案:

答案 0 :(得分:0)

GRAPHIC()并未将CCSID视为parm。根据我的7.1参考,第三个参数是长度。

您使用的是哪个版本?

我认为CAST()可能是一种解决方案,但它似乎无法发挥作用。

正如我所看到的,一种选择是构建一个用户定义的函数(UDF)来完成你需要的转换;可能使用iconv() API。

另一种选择是将数据转储到格式正确的文件中。我使用DBU的DBUJRN实用程序。还有其他类似的选择。包括一个开源one(很遗憾,该描述是德语,但谷歌翻译确实足以找出下载源)。

实用程序基本上以相同的方式工作;实际上,您可以手动运行相同的过程。请尝试以下方法:

第1步(你正在做的DSPJRN)

DSPJRN <...> OUTFILE(MYLIB/MYJRNOUT) 

步骤2 - 创建一个新文件,其中包含日记标题字段,后跟日记文件中的所有字段(MYFILE)

CREATE TABLE mylib/mytbl as 
  ( select JOENTL, JOSEQN, JOCODE, JOENTT, JODATE,     
           JOTIME, JOJOB, JOUSER, JONBR, JOPGM, JOOBJ, 
            JOLIB, JOMBR, JOCTRR, JOFLAG, JOCCID,       
           JOINCDAT, JOMINESD, JORES,
           m.*
     from MYLIB/MYJRNOUT , MYLIB/MYFILE m
   ) with no data

步骤3 - 复制数据而不考虑格式差异。

CPYF FROMFILE(MYLIB/MYJRNOUT) TOFILE(MYLIB/MYTBL) MBROPT(*ADD) FMTOPT(*NOCHK)

您最终应将最初在JOESD中的数据拆分为适当的字段。

当然请注意,此技术一次只适用于一个文件。另外,请确保您只是转储* RCD条目,并且您可能想要跳过DELETE条目。