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

REGEXP_LIKE . में सीएचआर(0)

CHR(0) सी प्रोग्रामिंग भाषा (दूसरों के बीच) में एक स्ट्रिंग को समाप्त करने के लिए उपयोग किया जाने वाला वर्ण है।

जब आप CHR(0) . पास करते हैं फ़ंक्शन के लिए, यह बदले में, इसे निचले स्तर के फ़ंक्शन में पास करेगा जो आपके द्वारा पारित स्ट्रिंग को पार्स करेगा और उस स्ट्रिंग से नियमित अभिव्यक्ति पैटर्न तैयार करेगा। इस रेगुलर एक्सप्रेशन पैटर्न में CHR(0) दिखाई देगा और सोचें कि यह स्ट्रिंग टर्मिनेटर है और बाकी पैटर्न को अनदेखा करें।

REGEXP_REPLACE . के साथ व्यवहार को देखना आसान है :

SELECT REGEXP_REPLACE( 'abc' || CHR(0) || 'e', CHR(0), 'd' )
FROM   DUAL;

जब आप इसे चलाते हैं तो क्या होता है:

  • CHR(0) एक नियमित अभिव्यक्ति में संकलित किया जाता है और एक स्ट्रिंग टर्मिनेटर बन जाता है।
  • अब पैटर्न केवल स्ट्रिंग टर्मिनेटर है और इसलिए पैटर्न शून्य-लंबाई वाला स्ट्रिंग है।
  • रेगुलर एक्सप्रेशन को फिर इनपुट स्ट्रिंग से मिलान किया जाता है और यह पहला अक्षर a पढ़ता है और पाता है कि शून्य-लंबाई वाली स्ट्रिंग का मिलान a . से पहले किया जा सकता है इसलिए यह a . से पहले मिलान किए गए कुछ भी नहीं को बदल देता है एक d . के साथ आउटपुट दे रहा है da
  • फिर यह b . को बदलने वाले अगले वर्ण के लिए दोहराएगा करने के लिए db
  • और इसी तरह जब तक आप एंड-ऑफ-स्ट्रिंग तक नहीं पहुंच जाते जब यह शून्य-लंबाई पैटर्न से मेल खाएगा और एक अंतिम d जोड़ देगा ।

और आपको आउटपुट मिलेगा:

dadbdcd_ded

(जहां _ CHR(0) है चरित्र। )

नोट:CHR(0) इनपुट में बदला नहीं गया है।

यदि आप जिस क्लाइंट प्रोग्राम का उपयोग कर रहे हैं वह CHR(0) . पर स्ट्रिंग को छोटा कर रहा है आप संपूर्ण आउटपुट नहीं देख सकते हैं (यह एक मुद्दा है कि आपका क्लाइंट स्ट्रिंग का प्रतिनिधित्व कैसे कर रहा है और ओरेकल के आउटपुट के साथ नहीं) लेकिन इसे DUMP() का उपयोग करके भी दिखाया जा सकता है। :

SELECT DUMP( REGEXP_REPLACE( 'abc' || CHR(0) || 'e', CHR(0), 'd' ) )
FROM DUAL;

आउटपुट:

Typ=1 Len=11: 100,97,100,98,100,99,100,0,100,101,100

[TL;DR] तो क्या हो रहा है

REGEXP_LIKE( '1234567890', CHR(0) )

यह एक शून्य-लंबाई वाली स्ट्रिंग रेगुलर एक्सप्रेशन पैटर्न बनाएगा और यह 1 से पहले एक शून्य-लंबाई वाले मैच की तलाश करेगा। चरित्र - जिसे वह ढूंढेगा और फिर वापस लौटाएगा कि उसे एक मैच मिला है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TransactionScope और Oracle के साथ समस्याएं

  2. ORA-00942:स्प्रिंग बूट में स्प्रिंग JDBC टेम्प्लेट के साथ तालिका या दृश्य मौजूद नहीं है

  3. वीबी6 एप्लीकेशन ऑरैकल 12 64 बिट कनेक्शन

  4. कई समान बाइंड तर्कों के साथ तत्काल तत्काल का उपयोग करना

  5. Oracle एक दृश्य में सभी स्तंभों के लिए तारांकन को प्रतिस्थापित करता है