oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...
就個人而言,我會使用CHR()來識別零值。 nul是ASCII 0, CHR()將返回您傳入的數(shù)字的字符表示。
SQL> with the_data as (
2 select 'a' || chr(0) || 'b' as str from dual
3 union all
4 select 'a' || 'c' from dual
5 )
6 select dump(str)
7 from the_data
8 where str like '%' || chr(0) || '%'
9 ;
DUMP(STR)
----------------------------------------------------
Typ=1 Len=3: 97,0,98
正如您所看到的那樣,通過連接CHR(0)周圍的百分比符號CHR(0)相當(dāng)于nul),您可以返回帶有nul的行。
DUMP()返回數(shù)據(jù)類型( 1表示VARCHAR2 )字符串的長度(以字節(jié)為單位)和數(shù)據(jù)的內(nèi)部表示形式; 默認為二進制。
但是, 您需要注意多字節(jié)數(shù)據(jù),因為CHR()返回的數(shù)字的模數(shù)等于256:
SQL> with the_data as (
2 select 'a' || chr(0) || 'b' as str from dual
3 union all
4 select 'a' || chr(256) || 'c' from dual
5 )
6 select dump(str)
7 from the_data
8 where str like '%' || chr(0) || '%'
9 ;
DUMP(STR)
-------------------------------------------------
Typ=1 Len=3: 97,0,98
Typ=1 Len=4: 97,1,0,99
正如你所看到的,你會錯誤地在這里找到一個nul,使用CHR()或DUMP()
換句話說,如果您沒有多字節(jié)數(shù)據(jù),那么最簡單的方法就是替換它:
update
set = replace(, chr(0));
使用RAWTOHEX()有類似的問題; 雖然你可以找到00但不能保證它實際上是一個零點:
SQL> with the_data as (
2 select 'a' || chr(0) || 'b' as str from dual
3 union all
4 select 'a' || chr(256) || 'c' from dual
5 )
6 select rawtohex(str)
7 from the_data
8 where str like '%' || chr(0) || '%'
9 ;
RAWTOHEX
--------
610062
61010063
它實際上還有一個問題; 想象你有兩個字符10和06 ,返回的值是1006 ,你會找到00 。 如果您要使用此方法,則必須確保僅從字符串的開頭查看兩個字符組。
由于nul字符的內(nèi)部表示用于表示其他多字節(jié)字符的部分,因此您不能只替換它們,因為您不知道它是一個字符還是半個字符。 因此,如果您使用多字節(jié)字符集,據(jù)我所知,您將無法執(zhí)行此操作。
總結(jié)
以上是生活随笔為你收集整理的oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享多年收集的40款免费开源源码
- 下一篇: mysql 第几周 时间戳_php时间戳