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

उन पंक्तियों को खोजें जहाँ टेक्स्ट सरणी में इनपुट के समान मान होता है

यह समझना भी महत्वपूर्ण है कि ANY है नहीं एक ऑपरेटर लेकिन एक SQL निर्माण जिसका उपयोग केवल दाएं . के लिए किया जा सकता है एक ऑपरेटर का। अधिक:

  • रेल के साथ WHERE क्लॉज में IN के बजाय Any का उपयोग कैसे करें?

LIKE ऑपरेटर - या अधिक सटीक:अभिव्यक्ति , जिसे ~~ . के साथ फिर से लिखा जाता है ऑपरेटर पोस्टग्रेज में आंतरिक रूप से - मान . की अपेक्षा करता है बाईं ओर और पैटर्न दांई ओर। कोई COMMUTATOR नहीं है इस ऑपरेटर के लिए (जैसे साधारण समानता ऑपरेटर के लिए है = ) इसलिए पोस्टग्रेज ऑपरेंड को इधर-उधर नहीं कर सकते।

आपका प्रयास:

select * from someTable where '%someInput%' LIKE ANY(someColum);

बाएँ और दाएँ ऑपरेंड फ़्लिप किया गया है इसलिए '%someInput%' मान है और सरणी कॉलम के तत्व someColum पैटर्न के रूप में लिया जाता है (जो वह नहीं है जो आप चाहते हैं)।

यह करेगा ANY(someColum) LIKE '%someInput%' - सिवाय इसके कि ANY . के साथ संभव नहीं है निर्माण जिसकी अनुमति केवल दाएं . को है एक ऑपरेटर का। आप यहां रोड ब्लॉक कर रहे हैं।

संबंधित:

  • क्या रेगेक्स पैटर्न वाले टेक्स्ट कॉलम को उपयोगी रूप से अनुक्रमित करने का कोई तरीका है?
  • क्या PostgreSQL सरणी स्तंभों को अनुक्रमित कर सकता है?

आप अपने रिलेशनल डिज़ाइन को सामान्य कर सकते हैं और तत्वों . को सहेज सकते हैं एक अलग तालिका में अलग-अलग पंक्तियों में सरणी का। इसे छोड़कर, unnest() समाधान है, जैसा कि आप पहले ही खुद को पा चुके हैं। लेकिन जब आप केवल कम से कम एक मेल खाने वाले तत्व के अस्तित्व में रुचि रखते हैं, एक EXISTS परिणाम में डुप्लिकेट से बचने के दौरान सबक्वेरी सबसे कुशल होगी - पहला मैच मिलते ही पोस्टग्रेज खोज को रोक सकता है:

SELECT *
FROM   tbl
WHERE  EXISTS (
    SELECT -- can be empty 
    FROM   unnest(someColum) elem
    WHERE  elem LIKE '%someInput%'
  );

आप someInput . में विशेष वर्ण से बचना चाह सकते हैं . देखें:

  • रेगुलर एक्सप्रेशन या LIKE पैटर्न के लिए एस्केप फ़ंक्शन

निषेध से सावधान (NOT LIKE ALL (...) ) जब NULL शामिल हो सकते हैं:

  • जांचें कि पोस्टग्रेज ऐरे में NULL मौजूद है या नहीं


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मनमानी उपयोगकर्ता को विचारों पर सभी विशेषाधिकार कैसे प्रदान करें

  2. प्रोग्रामेटिक रूप से पोस्टग्रेज JDBC के लिए एक `डेटासोर्स` ऑब्जेक्ट तैयार करें

  3. कठपुतली के साथ बर्मन को स्वचालित करना:it2ndq/barman (भाग एक)

  4. plpgsql फ़ंक्शन में तालिका और स्तंभ नामों को तर्क के रूप में परिभाषित करें?

  5. पोस्टग्रेस्क्ल विदेशी कुंजी सिंटैक्स