व्यक्तिगत रूप से मैं CHR()
शून्य मूल्यों की पहचान करने के लिए। एक नल एक ASCII 0 और CHR()
है आपके द्वारा पास की गई संख्या का वर्ण प्रतिनिधित्व लौटाएगा।
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)
. के आसपास प्रतिशत चिह्नों को जोड़कर देख सकते हैं (जो कि nul के बराबर है) आप nul in वाली पंक्तियों को वापस कर सकते हैं।
DUMP()
डेटा प्रकार लौटाता है (1 का अर्थ है VARCHAR2 ) बाइट्स में स्ट्रिंग की लंबाई और डेटा का आंतरिक प्रतिनिधित्व; डिफ़ॉल्ट बाइनरी है।
हालांकि, आपको मल्टीबाइट डेटा से सावधान रहने की आवश्यकता है CHR()
के रूप में संख्या के 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
जैसा कि आप देख सकते हैं कि CHR()
. का उपयोग करके आप गलती से एक नल की पहचान कर लेंगे या DUMP()
दूसरे शब्दों में, यदि आपके पास मल्टीबाइट डेटा नहीं है तो सबसे आसान काम है प्रतिस्थापित करें यह:
update <table>
set <column> = replace(<column>, 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
मिलेगा . यदि आप इस पद्धति का उपयोग करते हैं तो आपको यह सुनिश्चित करना होगा कि आपने स्ट्रिंग की शुरुआत से केवल दो वर्ण समूहों को देखा है।
चूंकि एक नल चरित्र का आंतरिक प्रतिनिधित्व अन्य, मल्टीबाइट वर्णों के हिस्सों का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, आप उन्हें केवल प्रतिस्थापित नहीं कर सकते क्योंकि आप नहीं जानते कि यह एक वर्ण या आधा वर्ण है या नहीं। इसलिए, यदि आप एक मल्टीबाइट कैरेक्टर सेट का उपयोग कर रहे हैं, जहाँ तक मुझे पता है, आप ऐसा करने में सक्षम नहीं होंगे।