Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle डेटाबेस में NUL वर्णों से कैसे छुटकारा पाएं?

व्यक्तिगत रूप से मैं 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 मिलेगा . यदि आप इस पद्धति का उपयोग करते हैं तो आपको यह सुनिश्चित करना होगा कि आपने स्ट्रिंग की शुरुआत से केवल दो वर्ण समूहों को देखा है।

चूंकि एक नल चरित्र का आंतरिक प्रतिनिधित्व अन्य, मल्टीबाइट वर्णों के हिस्सों का प्रतिनिधित्व करने के लिए उपयोग किया जाता है, आप उन्हें केवल प्रतिस्थापित नहीं कर सकते क्योंकि आप नहीं जानते कि यह एक वर्ण या आधा वर्ण है या नहीं। इसलिए, यदि आप एक मल्टीबाइट कैरेक्टर सेट का उपयोग कर रहे हैं, जहाँ तक मुझे पता है, आप ऐसा करने में सक्षम नहीं होंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle त्रुटि असंगत डेटाटाइप:अपेक्षित CHAR लंबा हो गया

  2. दो स्तंभों के बीच की संख्याओं की सूची प्राप्त करें

  3. Oracle में प्राथमिक डेटाबेस के साथ स्टैंडबाय को सिंक करने के चरण

  4. हम कल शाम 5 बजे से शाम 5 बजे तक समूह कैसे बना सकते हैं आज की तारीख को रिकॉर्ड करें

  5. केस और इन के साथ अपडेट करें - Oracle