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

एक सरणी से एक, गैर-अद्वितीय मान निकालें

dba.SE पर मेरे पुराने उत्तर के आधार पर जो आपने पाया और अच्छे उपयोग में लाया:

आप इसे एक कदम आगे ले जा सकते हैं:

CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
  RETURNS anyarray LANGUAGE sql IMMUTABLE AS
'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';

यह फ़ंक्शन दूसरे पैरामीटर के रूप में निकालने के लिए तत्व का मान लेता है। बहुरूपी छद्म-प्रकार का उपयोग करना anyelement तदनुसार किसी भी सरणी प्रकार के लिए यह कार्य करने के लिए।

फिर UPDATE बस है:

UPDATE test_table
SET    test_array = f_array_remove_elem1(test_array, 'B')
WHERE  id = 1;

db<>fiddle यहां

मेरे मूल फ़ंक्शन का उपयोग करते समय f_array_remove_elem() जो तत्व मान के बजाय अनुक्रमणिका स्थिति लेता है, आप सबक्वायरी के बिना कर सकते हैं:

UPDATE test_table
SET    test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE  id = 1;

मेरे नए फ़ंक्शन से थोड़ा तेज़ भी हो सकता है।
और ध्यान दें कि मेरे पुराने उत्तर के निचले भाग में सरल संस्करण Postgres 9.6 के लिए काम करता है।



  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 क्लाइंट लाइब्रेरी नहीं ढूँढ सकता (libpq)

  2. स्थानीय PostgreSQL से कनेक्ट नहीं हो सकता

  3. ओपन-हाई-लो-क्लोज़ (OHLC) रिपोर्ट के लिए PostgreSQL को क्वेरी करना

  4. Postgresql में SSL कनेक्शन पर होस्टनाम सत्यापित त्रुटि संदेश नहीं है

  5. Django/PostgreSQL (भारतीय मानक समय) में कस्टम टाइमज़ोन सेट करें