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

दो कॉलमों को मिलाएं और एक नए कॉलम में जोड़ें

आम तौर पर, मैं @kgrittn की सलाह से सहमत हूं। इसके लिए जाओ।

लेकिन concat() . के बारे में अपने मूल प्रश्न का समाधान करने के लिए :नया फ़ंक्शन concat() उपयोगी है यदि आपको शून्य मानों से निपटने की आवश्यकता है - और अशक्त को न तो आपके प्रश्न में और न ही आपके द्वारा संदर्भित प्रश्न में खारिज किया गया है।

यदि आप अशक्त मानों, अच्छे पुराने (एसक्यूएल मानक) संयोजन ऑपरेटर को रद्द कर सकते हैं || अभी भी सबसे अच्छा विकल्प है, और @luis का जवाब ठीक है:

SELECT col_a || col_b;

यदि आपका कोई भी कॉलम शून्य हो सकता है, उस स्थिति में परिणाम शून्य होगा। आप COALESCE . से बचाव कर सकते हैं :

SELECT COALESCE(col_a, '') || COALESCE(col_b, '');

लेकिन यह अधिक तर्कों के साथ जल्दी से थकाऊ हो जाता है। वहीं concat() में आता है, जो कभी नहीं शून्य लौटाता है, भले ही सभी . न हो तर्क शून्य हैं। प्रति दस्तावेज़:

<ब्लॉकक्वॉट>

NULL तर्कों पर ध्यान नहीं दिया जाता है।

SELECT concat(col_a, col_b);

शेष कोने का मामला दोनों विकल्पों के लिए सभी इनपुट कॉलम रिक्त हैं किस स्थिति में हमें अभी भी एक खाली स्ट्रिंग मिलती है '' , लेकिन कोई इसके बजाय शून्य चाहता है (कम से कम मैं चाहता हूं)। एक संभावित तरीका:

SELECT CASE
          WHEN col_a IS NULL THEN col_b
          WHEN col_b IS NULL THEN col_a
          ELSE col_a || col_b
       END;

यह अधिक कॉलम के साथ और अधिक जटिल हो जाता है। दोबारा, concat() use का उपयोग करें लेकिन विशेष शर्त के लिए एक चेक जोड़ें:

SELECT CASE WHEN (col_a, col_b) IS NULL THEN NULL
            ELSE concat(col_a, col_b) END;

यह कैसे काम करता है?
(col_a, col_b) एक पंक्ति प्रकार अभिव्यक्ति के लिए आशुलिपि संकेतन है ROW (col_a, col_b) . और एक पंक्ति प्रकार केवल शून्य है यदि सभी कॉलम शून्य हैं। विस्तृत विवरण:

  • स्तंभों के एक सेट पर पूर्ण बाधा नहीं

साथ ही, concat_ws() का उपयोग करें तत्वों के बीच विभाजक जोड़ने के लिए (ws "विभाजक के साथ") के लिए।

केविन के उत्तर की तरह एक अभिव्यक्ति:

SELECT $1.zipcode || ' - ' || $1.city || ', ' || $1.state;

PostgreSQL 8.3 में शून्य मानों के लिए तैयार करने के लिए कठिन है (बिना concat() ) एक ही रास्ता (कई में से):

SELECT COALESCE(
         CASE
            WHEN $1.zipcode IS NULL THEN $1.city
            WHEN $1.city    IS NULL THEN $1.zipcode
            ELSE $1.zipcode || ' - ' || $1.city
         END, '')
       || COALESCE(', ' || $1.state, '');

फ़ंक्शन अस्थिरता केवल STABLE है

concat() और concat_ws() STABLE हैं फ़ंक्शन, IMMUTABLE . नहीं क्योंकि वे डेटाटाइप आउटपुट फ़ंक्शंस (जैसे timestamptz_out . को लागू कर सकते हैं ) जो स्थानीय सेटिंग्स पर निर्भर करता है।
टॉम लेन द्वारा स्पष्टीकरण।

यह सूचकांक अभिव्यक्तियों में उनके प्रत्यक्ष उपयोग को प्रतिबंधित करता है। अगर आप जानते हैं कि परिणाम वास्तव में आपके मामले में अपरिवर्तनीय है, आप इसके आसपास IMMUTABLE के साथ काम कर सकते हैं समारोह आवरण। यहां उदाहरण:

  • क्या PostgreSQL "उच्चारण असंवेदनशील" संयोजनों का समर्थन करता है?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 9.2.1 . में लूपिंग ट्रिगर कॉल से कैसे बचें

  2. MySQL, PostgreSQL और SQLite में डेटाबेस कॉलम प्रकारों की तुलना? (क्रॉस-मैपिंग)

  3. लगातार दोहराव/डुप्लिकेट की संख्या का आदेश दिया

  4. Psql स्क्रिप्ट चलाते समय जानकारी संदेशों को कैसे दबाएं?

  5. तालिका या स्तंभ नाम संख्यात्मक से प्रारंभ नहीं हो सकता है?