ओरेकल में स्ट्रिंग संघनन ऑपरेटर क्या है?


172

ओरेकल एसक्यूएल में स्ट्रिंग कॉन्टैक्शन ऑपरेटर क्या है?

क्या कोई "दिलचस्प" विशेषताएं हैं जिनसे मुझे सावधान रहना चाहिए?

(यह स्पष्ट लगता है, लेकिन मुझे यह पूछने वाला कोई पिछला प्रश्न नहीं मिला)।


जवाबों:


237

यह ||उदाहरण के लिए है:

select 'Mr ' || ename from emp;

एकमात्र "दिलचस्प" सुविधा जो मैं सोच सकता हूं, वह यह है कि 'x' || nullरिटर्न 'x', जैसा कि nullआप शायद उम्मीद नहीं कर सकते हैं।


3
मैं एक तार्किक ऑपरेशन से अशक्त होने की उम्मीद करूँगा ... निश्चित नहीं कि मैंने कभी एक स्ट्रिंग ऑपरेशन के बारे में सोचा होगा।

1
बेशक ओरेकल अशक्त और '' को समान मानता है, और 'x' || '' = 'x' समझ में आता है। लेकिन यदि आप अशक्त को "अपरिभाषित" या "अज्ञात" मानते हैं तो 'x' || null किसी भी स्ट्रिंग की शुरुआत 'x' से हो सकती है और इसलिए वह "अज्ञात" है!
टोनी एंड्रयूज

4
||ओरेकल में एक तार्किक ऑपरेटर नहीं है, इसलिए, 'x'||nullरिटर्न x
इजा

3
@ipip: मैं उलझन में हूँ - अगर "लॉजिकल ऑपरेटर" से आपका मतलब है जैसे ऑपरेटर इत्यादि AND, NOTतो बेशक ||लॉजिकल ऑपरेटर नहीं है। लेकिन 'x'||nullलौटने के कारण क्या होता है x? n+nullरिटर्न अशक्त है, तो +एक तार्किक ऑपरेटर है?
टोनी एंड्रयूज


61

वहाँ भी है, लेकिन यह ज्यादा इस्तेमाल नहीं किया है

select concat('a','b') from dual;

6
इस तरह से बेहतर है || प्रतीक। का उपयोग कर || अन्य भाषा के उपयोग के अनुसार सिर्फ भ्रमित कर रहा है ||
जोर्डन

17
स्पष्टता के लिए सहमत, लेकिन || अधिक आसानी से 2 क्षेत्रों की अनुमति देने का लाभ है
पैट्रिक होनोरेज

3
CONCATअन्य DBMSes (कम से कम MySQL और Postgres) के साथ भी संगत है।
लैपो

1
अजीब बात है कि यह ANSI SQL समिति के लिए नहीं था कि किसी को भी दो से अधिक चीजों को संक्षिप्त करने की आवश्यकता हो सकती है। (वही ओरेकल में प्रतिभाओं के लिए चला जाता है जो साथ आए थे nvl()।)
विलियम रॉबर्टसन

1
CONCATMicrosoft SQL Server 2012 और उसके बाद भी उपलब्ध है । CONCAT, हालांकि गैर-मानक, निश्चित रूप से जाने का तरीका है यदि आप चाहते हैं कि आपका कोड पोर्टेबल हो। ( ||वास्तविक एएनएसआई मानक ऑपरेटर है, हालांकि आप इसके लिए समर्थन को देखकर इसे नहीं जान पाएंगे!)
मैट गिब्सन

11

मैं 2 स्ट्रिंग्स के साथ काम करते समय कंकट का सुझाव दूंगा, और || जब वे तार 2 से अधिक हों:

select concat(a,b)
  from dual

या

  select 'a'||'b'||'c'||'d'
        from dual

2
खेद मुझे पता है यह 2 साल पहले था, लेकिन तुम क्यों पसंद करेंगे concat(a,b)से अधिक a||b?
टोनी एंड्रयूज

|| छोटा, अधिक लचीला और सरल। उनके चुनिंदा बयान को देखें।
जोशिएट्स

6
DECLARE
     a      VARCHAR2(30);
     b      VARCHAR2(30);
     c      VARCHAR2(30);
 BEGIN
      a  := ' Abc '; 
      b  := ' def ';
      c  := a || b;
 DBMS_OUTPUT.PUT_LINE(c);  
   END;

आउटपुट :: एबीसी डीईएफ़


1

CONCAT(CONCAT(,),)दो से अधिक तारों को समतल करते समय मेरे लिए काम करना ।

मेरी समस्या के लिए आवश्यक (केवल) तिथि तार के साथ काम करने और बनाने YYYYMMDDसे YYYY-MM-DDइस प्रकार है (यानी दिनांक स्वरूप को बदलने के बिना):

CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.