带有nul的PL \ SQL varchar2变量

时间:2018-01-16 17:49:16

标签: sql r oracle varchar

我在SLQ Developer中有一个查询,并且变量(varchar2)中有一条记录是JOYABCD。 使用notepad ++来查看它就像:JOYnulABCD。所以实际上JOY和ABCD之间存在一个空白角色。

在PL \ SQL中有没有办法摆脱这个nul? 我尝试了以下内容: regexp_replace(name_variable,' \ 0',NULL)

但R说:不允许使用nul字符

为什么,R说出来?在slq中它可以工作并消除零字符..

谢谢你, 安德烈

1 个答案:

答案 0 :(得分:2)

如果字符串str包含chr(0)nul字符),您可以将其从字符串中删除,如下所示:

replace(str, chr(0))

这将是相同的字符串,每次出现chr(0)都会被删除。

演示

这里我在str子句中创建了一个字符串with,但在现实生活中它应该是您的变量或列名。然后,我"替换"带有正则表达式的chr(0)(正如您将看到的那样),并且使用标准REPLACE。我使用DUMP函数来显示字符串中的实际字符。正如您将看到的,原始字符串和正则表达式结果的第四个字符是nul(值0),但是当我使用标准Oracle函数REPLACE(不基于正则表达式)时,0将被删除)。

with inputs as ( select 'JOY' || chr(0) || 'ABC' as str from dual )
select dump(str)                         as dump_str,
       dump(regexp_replace(str, chr(0))) as dump_after_regexp_replace,
       dump(replace(str, chr(0)))        as dump_after_replace
from   inputs
;

DUMP_STR                         DUMP_AFTER_REGEXP_REPLACE        DUMP_AFTER_REPLACE           
-------------------------------- -------------------------------- ------------------------------
Typ=1 Len=7: 74,79,89,0,65,66,67 Typ=1 Len=7: 74,79,89,0,65,66,67 Typ=1 Len=6: 74,79,89,65,66,67