从 DB2 表读取时用 null 替换特殊字符

问题描述

我需要在从 DB2 表读取空值时替换特殊字符,如“VT”(垂直制表符)、换行符、回车符等。

我发现 REGEXP_REPLACE 函数在 DB2 中不起作用或未将其作为 select 子句中的函数

有没有办法用 null 替换所有特殊字符?

解决方法

REGEXP 函数接受 Unicode 字符类,以及 Unicode 代码点范围。

您可能需要将您的类定义为“特殊字符”。例如。 £ 是特殊字符吗? ? 怎么样?

如果您在要删除的集合中采用“控制”字符的 Unicode 定义,那么您可以使用它来删除它们

REGEXP_REPLACE(your_column,'[\p{Control}]*','')

如果你想删除除 e.g. 之外的所有字符“普通”可打印的 7 位 ASCII 等效项,您可以使用此

 REGEXP_EXTRACT(your_column,'[^\u0020-\u007E]+','')

这会删除 Unicode 中不在 U+0020 SPACEU+007E TILDE 之间的每个字符。 IE。它将保留基本拉丁语 https://en.wikipedia.org/wiki/List_of_Unicode_characters#Basic_Latin 的所有内容,但将删除所有其他代码点(包括 £À?

,

尝试使用 x'code ascii'(参见:x'OA' for LF),它在 DB2 LUW 11.5 上对我有用

db2 => select 'AE'||x'0A'||'MN' from sysibm.sysdummy1;

1
-----  
AE 
MN

将 LF 替换为:-

db2 => select REGEXP_REPLACE('AE'||x'0A'||'MN',x'0A','-') from sysibm.sysdummy1;

1
-----------
AE-MN

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...