我在SLQ Developer中有一个查询,并且变量(varchar2)中有一条记录是JOYABCD。 使用notepad ++来查看它就像:JOYnulABCD。所以实际上JOY和ABCD之间存在一个空白角色。
在PL \ SQL中有没有办法摆脱这个nul? 我尝试了以下内容: regexp_replace(name_variable,' \ 0',NULL)
但R说:不允许使用nul字符
为什么,R说出来?在slq中它可以工作并消除零字符..
谢谢你, 安德烈
答案 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