DB2/iSeries SQL清理CR/LF,选项卡等

Sim*_*son 4 sql db2 replace ibm-midrange

我需要在一组400k +字符串记录中找到并清理换行符,回车符,制表符和"SUB"字符,但这个DB2环境对我造成了影响.

以为我可以进行一些搜索并替换为REPLACE()和CHR()函数,但似乎CHR()在此系统上不可用(错误:CHR未找到*LIBL类型*N).使用\ t,\ t \,\n等似乎也无法正常工作.字符可以位于字符串的中间或结尾处.

DBMS = DB2
System = iSeries
Language = SQL
Encoding = Not sure, possibly EBCDIC
Run Code Online (Sandbox Code Playgroud)

关于我能用这个做什么的任何提示?

Dav*_*sen 6

我用这个SQL来找到x'25'和x'0D':

SELECT 
     <field>
    , LOCATE(x'0D', <field>) AS "0D" 
    , LOCATE(x'25', <field>) AS "25" 
    , length(trim(<field>)) AS "Length"
FROM <file> 
WHERE   LOCATE(x'25', <field>) > 0 
    OR  LOCATE(x'0D', <field>) > 0 
Run Code Online (Sandbox Code Playgroud)

我用这个SQL替换它们:

UPDATE <file> 
SET <field> = REPLACE(REPLACE(<field>, x'0D', ' '), x'25', ' ')
WHERE   LOCATE(x'25', <field>) > 0 
    OR  LOCATE(x'0D', <field>) > 0 
Run Code Online (Sandbox Code Playgroud)


Pau*_*gan 5

如果要清除特定字符,例如回车符 (EBCDIC x'0d') 和换行符 (EBCDIC x'25'),您应该在 EBCDIC 中找到翻译后的字符,然后使用 TRANSLATE() 函数将它们替换为空格。

如果您只想删除无法显示的字符,请查找 x'40' 以下的任何内容。

  • 实际上,换行是 EBCDIC x'25'。x'0A' 是 ASCII 中的 LF。 (3认同)