问题描述
我需要在从 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 SPACE
和 U+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