2014-06-17 6 views
10

पर स्ट्रिंग ट्रिम करने के लिए सबस्ट्र का उपयोग करना मैं एक स्ट्रिंग को निर्दिष्ट लंबाई तक ट्रिम करना चाहता हूं। यदि स्ट्रिंग छोटा है, तो मैं कुछ भी नहीं करना चाहता। मुझे एक फ़ंक्शन सबस्ट्र() मिला जो नौकरी करता है। हालांकि ओरेकल दस्तावेज में कुछ भी नहीं है, यदि अधिकतम लंबाई की तुलना में स्ट्रिंग कम है तो क्या होता है।ओरेकल

select substr('abc',1,5) from dual; 

रिटर्न 'एबीसी' है, जो मैं क्या जरूरत है:

उदाहरण इसके लिए

मैं यह पूछना चाहता हूं कि यह सुरक्षित है, क्योंकि फ़ंक्शन इस उपयोग के लिए परिभाषित नहीं किया गया है। क्या छंटनी करने का एक बेहतर तरीका है?

+1

'SUBSTR' हमेशा स्ट्रिंग का सबसेट। तो वास्तविक स्ट्रिंग से अधिक कभी नहीं होने वाला है। –

उत्तर

5

यह एक दिलचस्प सवाल है। आश्चर्य की बात है, documentation स्पष्ट रूप से इस बिंदु को कवर करने के लिए प्रतीत नहीं होता है।

मुझे लगता है कि आप जो कर रहे हैं वह काफी सुरक्षित है। स्ट्रिंग बहुत छोटा होने पर substr() स्ट्रिंग के अंत में वर्णों को "जोड़ने" नहीं जा रहा है। मैंने समय के साथ ओरेकल समेत कई डेटाबेसों में इस व्यवहार पर निर्भर किया है। इस तरह के समान कार्य अन्य डेटाबेस और अधिकांश भाषाओं में काम करते हैं।

एक प्रकार का अपवाद तब होगा जब मूल डेटा प्रकार प्रकार के बजाय char() है। इस मामले में, फ़ंक्शन एक ही प्रकार की स्ट्रिंग लौटाएगा, इसलिए इसे रिक्त स्थान से जोड़ा जा सकता है। हालांकि, यह वास्तव में फ़ंक्शन का प्रकार नहीं है।

12

यह पूरी तरह से ठीक है, लेकिन अगर आप चाहते हैं, तो आप इस क्वेरी का उपयोग कर सकते हैं:

select substr('abc',1,least(5,length('abc'))) from dual; 
3

यह नीचे दिए गए क्वेरी

SELECT SUBSTR('abc',1,LEAST(5,LENGTH('abc'))) FROM DUAL; 

क्वेरी से ऊपर का उपयोग करने के लिए या तो की लंबाई ले जाएगा बेहतर है स्ट्रिंग या संख्या 5 जो भी कम हो।

+0

यह बेहतर क्यों है? आप 2 और फ़ंक्शंस निष्पादित कर रहे हैं ... – Ben

+0

मेरा मतलब था, मूर्ख साबित होना और किसी भी संदेह के बिना आराम से आश्वस्त होना! –

2

आप पूरी तरह आश्वस्त हैं कि आप अकेले substr का उपयोग करके रिक्त स्थान को पूर्ण विराम वाले नहीं करना पड़ेगा होना चाहते हैं (आप यह नहीं करेंगे, लेकिन कभी कभी यह वास्तव में सुनिश्चित हो आरामदायक है) आप उपयोग कर सकते हैं:

SELECT RTRIM(SUBSTR('abc',1,5)) FROM DUAL; 

साझा करें और आनंद लें।