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

पोस्टग्रेज में अल्फ़ान्यूमेरिक केस इन-सेंसिटिव सॉर्टिंग

मेरा पोस्टग्रेएसक्यूएल जिस तरह से आप चाहते हैं उसे सॉर्ट करता है। PostgreSQL जिस तरह से स्ट्रिंग्स की तुलना करता है, वह लोकेल और कॉलेशन द्वारा निर्धारित किया जाता है। जब आप createdb . का उपयोग करके डेटाबेस बनाते हैं वहाँ -l . है लोकेल सेट करने का विकल्प। psql -l . का उपयोग करके आप यह भी जांच सकते हैं कि यह आपके वातावरण में कैसे कॉन्फ़िगर किया गया है :

[[email protected]]$ psql -l
List of databases
 Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
---------+----------+----------+------------+------------+-----------------------
 mn_test | postgres | UTF8     | pl_PL.UTF8 | pl_PL.UTF8 |

जैसा कि आप देख रहे हैं कि मेरा डेटाबेस पोलिश संयोजन का उपयोग करता है।

यदि आपने अन्य संयोजन का उपयोग करके डेटाबेस बनाया है तो आप क्वेरी में अन्य संयोजन का उपयोग कर सकते हैं जैसे:

SELECT * FROM sort_test ORDER BY name COLLATE "C";
SELECT * FROM sort_test ORDER BY name COLLATE "default";
SELECT * FROM sort_test ORDER BY name COLLATE "pl_PL";

आप उपलब्ध कॉलेशनों को इसके द्वारा सूचीबद्ध कर सकते हैं:

SELECT * FROM pg_collation;

संपादित:

ओह, मुझे याद आया कि 'a11' 'a2' से पहले होना चाहिए।

मुझे नहीं लगता कि मानक संयोजन अल्फान्यूमेरिक सॉर्टिंग को हल कर सकता है। इस तरह की छँटाई के लिए आपको क्लॉडोआल्डो नेटो प्रतिक्रिया की तरह ही स्ट्रिंग को भागों में विभाजित करना होगा। एक अन्य विकल्प जो उपयोगी है यदि आपको अक्सर इस तरह से ऑर्डर करना पड़ता है तो नाम फ़ील्ड को दो कॉलम में अलग करना है। आप INSERT और UPDATE पर ट्रिगर बना सकते हैं जो name . को विभाजित करता है name_1 . में और name_2 और फिर:

SELECT name FROM sort_test ORDER BY name_1 COLLATE "en_EN", name_2;

(मैंने कोलेशन को पोलिश से अंग्रेजी में बदल दिया है, आपको अपने नेटिव कोलेशन का उपयोग अक्षरों को सॉर्ट करने के लिए करना चाहिए जैसे aącć आदि)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कॉलम 1 द्वारा ऑर्डर करें यदि कॉलम 1 रिक्त नहीं है, अन्यथा कॉलम 2 द्वारा ऑर्डर करें

  2. PostgreSQL कनेक्शन नोडज के लिए एसएसएल

  3. Postgres . में मौजूदा कॉलम में 'धारावाहिक' जोड़ना

  4. त्रुटि:तालिका पर अद्यतन या हटाएं उपयोगकर्ता तालिका टिप्पणियों पर विदेशी कुंजी बाधा fk_rails_03de2dc08c का उल्लंघन करते हैं

  5. प्रेस्टो एसक्यूएल:क्वेरी के परिणामस्वरूप आने वाले समय क्षेत्र स्ट्रिंग का उपयोग करके समय क्षेत्र बदलना काम नहीं कर रहा है