कैसे असंवेदनशील परिणाम के मामले को सॉर्ट करने के लिए SQL ऑर्डर का उपयोग करें?


144

मेरे पास एक SQLite डेटाबेस है जिसे मैं वर्णानुक्रम से क्रमबद्ध करने की कोशिश कर रहा हूं। समस्या यह है कि, SQLite A = को छांटने के दौरान विचार नहीं करता है, इस प्रकार मुझे इस तरह के परिणाम मिलते हैं:

A B C T a b c g

मैं पाना चाहता हूं:

अ ब ब ग ग ग ट

ऐसी विशेष एसक्यूएल चीज की क्या आवश्यकता है जिसके बारे में मुझे जानकारी नहीं है?

SELECT * FROM NOTES ORDER BY title

2
और इसे करने का अधिक कुशल तरीका क्या है? "टाइटल कोलाज द्वारा जारी आदेश" या "कम (टाइटल) द्वारा आदेश"। (FYI करें, मेरे मामले में, Android पर, यानी SQLite पर)
पास्कल

जवाबों:


253

आप यह भी कर सकते हैं ORDER BY TITLE COLLATE NOCASE

संपादित करें: यदि आपको निर्दिष्ट करने की आवश्यकता है ASCया DESC, इस NOCASEतरह के बाद जोड़ें

ORDER BY TITLE COLLATE NOCASE ASC

या

ORDER BY TITLE COLLATE NOCASE DESC

8
क्या "ORDER BY TITLE COLLATE NOCASE" "ORDER BY LOWER (TITLE)" की तुलना में अधिक कुशल है?
पास्कल

इस तरह से! है ना? वाह! क्यों बिल्ली SQLite यह छँटाई के लिए संवेदनशील मामला बना रहा है .... मेरे दिमाग में फिट नहीं है ... दुर्भाग्य से!
विन्ची

1
@ संकेत: मैं नहीं देखता कि केस-संवेदी स्ट्रिंग तुलना के बारे में कितना अजीब है। यही कारण है कि कैसे <, ==हर प्रोग्रामिंग भाषा है कि मैं से परिचित हूँ में डिफ़ॉल्ट रूप से आदि ऑपरेटरों काम करते हैं।
dan04

@ dan04 आपको कितनी बार एक स्ट्रिंग की आवश्यकता होती है जिसे संवेदनशील होना चाहिए? इसलिए यह हास्यास्पद है। स्ट्रिंग को छांटते समय दुनिया में कौन परवाह करता है? एकमात्र स्थान जो मुझे दिखाई देता है वह प्रमाणीकरण या पासवर्ड सत्यापन के लिए है! यही कारण है कि डिफ़ॉल्ट होना चाहिए यह संवेदनशील होना चाहिए, imo!
विन्ची

यह आमतौर पर बॉक्स से बाहर काम नहीं करेगा, अगर डेटाबेस UTF8 का उपयोग करता है। (ध्यान दें कि शीर्षक सिर्फ SQLite को संदर्भित नहीं करता है।) इस मामले में, नीचे () या ऊपरी () नीचे का उपयोग करने का सुझाव काम करता है।
मार्को

99

आप छँटाई के प्रयोजनों के लिए सब कुछ बदल सकते हैं:

SELECT * FROM NOTES ORDER BY LOWER(title);

यदि आप यह सुनिश्चित करना चाहते हैं कि अपरकेस अभी भी लोअरकेस के आगे खत्म हो रहा है, तो इसे द्वितीयक प्रकार के रूप में जोड़ें:

SELECT * FROM NOTES ORDER BY LOWER(title), title;

1
मैं कई कॉलमों को छांट रहा हूं, क्या मुझे हर एक के आसपास LOWER डालना है?
कोडफ्यूजन मोबाईल

2
हां, मामले को असंवेदनशील होने के लिए ORDER BY के व्यवहार को बदलने का कोई तरीका नहीं है।
चाड बर्च

1
क्या 'UPPER' और 'LOWER' में कोई अंतर है
जगदीश

2
इस उद्देश्य के लिए, नहीं, वे दोनों एक ही प्रभाव को प्राप्त नहीं करेंगे, जो कि सभी वस्तुओं के मामले को समान बनाना है।
बेन बैरन

1
वे केवल वर्णों के लिए भिन्न होते हैं [] ^ _ `।
dan04

0
SELECT * FROM NOTES ORDER BY UPPER(title)              

14
आपके उत्तर के लिए धन्यवाद। लेकिन: एक अच्छे उत्तर में हमेशा एक स्पष्टीकरण होगा कि क्या किया गया था और यह इस तरह से क्यों किया गया था, न केवल ओपी के लिए बल्कि भविष्य के आगंतुकों के लिए एसओ।
B001 B
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.