आप दुर्भाग्य से संख्या स्वरूपों में स्ट्रिंग अक्षर शामिल नहीं कर सकते हैं, अन्यथा आप हेक्स स्ट्रिंग को एक संख्या में परिवर्तित कर सकते हैं और फिर वापस वापस आ सकते हैं, सही स्थानों पर प्रारूप मास्क में अक्षर सम्मिलित कर सकते हैं - लेकिन आप केवल तिथियों के लिए ऐसा कर सकते हैं।
आप substr()
. का उपयोग कर सकते हैं चूंकि पद निर्धारित हैं। आप चिंतित थे कि
जाहिर है कि मैं सबस्ट्र और कॉन्सटेनेशन का उपयोग नहीं कर सकता क्योंकि प्रत्येक SUBSTR एक अलग SYS_GUID को प्रोसेस करेगा।
सबक्वेरी फैक्टरिंग (उर्फ एक सामान्य टेबल एक्सप्रेशन/CTE) का उपयोग करने का अर्थ है substr()
उस सीटीई से एक पंक्ति के लिए कॉल सभी एक ही GUID देखते हैं; यह विधि प्रत्येक के लिए एक नया SYS_GUID उत्पन्न नहीं करती है।
with t as (
select rawtohex(sys_guid()) guid from dual
connect by level <= 2
)
select guid, substr(guid, 1, 8)
||'-'|| substr(guid, 9, 4)
||'-'|| substr(guid, 13, 4)
||'-'|| substr(guid, 17, 4)
||'-'|| substr(guid, 21, 12) as formatted_guid
from t;
GUID FORMATTED_GUID
-------------------------------- ----------------------------------------
2F6BA62518F926D0E0534D49E50ABB46 2F6BA625-18F9-26D0-E053-4D49E50ABB46
2F6BA62518FA26D0E0534D49E50ABB46 2F6BA625-18FA-26D0-E053-4D49E50ABB46
यह बड़ी मात्रा में डेटा पर रेगेक्स से बहुत तेज़ है। लूप में 100000 मानों के साथ (पीएल/एसक्यूएल ब्लॉक में, लूप के अंदर कम से कम काम करना ताकि यह वास्तव में ठीक से मूल्यांकन कर सके, और dbms_utility.get_cpu_time
का उपयोग कर सके। बीता हुआ समय जांचने के लिए) रेगेक्स संस्करण में लगभग 2.51 सेकंड लगते हैं, जबकि सबस्ट्रिंग संस्करण में लगभग 0.29 सेकंड लगते हैं। आपके सिस्टम को निश्चित रूप से अलग-अलग नंबर मिलेंगे, लेकिन यह अभी भी परिमाण के समान क्रम के बारे में होना चाहिए।