2012-09-21 31 views
6

मैं एक स्तंभ Number कहा जाता है (स्तंभ nchar है) इस डेटा के साथ आबादी है:आदेश

1 
2 
2B 
3 
20 
1091 
:

1 
2 
1091 
3 
20 
2B 

मैं एक का चयन करें बयान है कि इस आदेश देना चाहते हैं

मैं इसे कैसे पूरा कर सकता हूं? आपकी मदद के

(संपादित) के लिए धन्यवाद सब लोग

+0

कॉलम का प्रकार क्या है? – NicoRiff

+3

एक आदेश जो 2 बी से 3 बी के मानों को बदलता है? –

+0

पहले भाग में आपके पास 2 बी में 2 बी है। टाइपो? –

उत्तर

17

के बाद आप पहली गैर के स्थान को खोज एक अंकीय को परिवर्तित करके कुछ चाल प्रदर्शन कर सकते हैं -numeric। अंत में एक यादृच्छिक चरित्र को जोड़ना यह सभी स्ट्रिंग्स को समान बनाता है भले ही मूल स्ट्रिंग में वर्णमाला न हो।

SELECT [Number] FROM dbo.TableName 
ORDER BY CONVERT(INT, LEFT(Number, PATINDEX('%[^0-9]%', Number + 'z')-1)); 
+0

धन्यवाद हारून। सुंदर काम करता है। – BernieSF

+0

हारून - मुझे लगता है कि भविष्य के आगंतुकों को सही शब्दावली का उपयोग करने के लिए प्रश्न देना महत्वपूर्ण है। कभी-कभी दस्तावेज़ीकरण का एक लिंक बोनस होता है और यह मामला लगभग आवश्यक होता है। 'एसक्यूएल सर्वर' और 'कन्वर्ट' की खोज बहुत झूठी हिट खींचती है .. मुझे लगता है * यह एक पूर्णांक में परिवर्तित हो जाता है। आपकी अभिव्यक्ति में '-1' मुझे पूरी तरह भ्रमित करता है। यदि कोड करता है जो मैं/सोचता/करता हूं - यानी, 'संख्या' के केवल संख्यात्मक भाग को निकाला जाता है, तो '32 ए',' 32fred' और '32c' अनियंत्रित हो जाएगा - क्योंकि वर्णमाला भाग माना नहीं जाता है। –

+1

@ जेरेमी कोडिंग प्रश्न के समाधान के समाधान में उपयोग किए गए प्रत्येक एकल फ़ंक्शन की परिभाषा को शामिल नहीं करना चाहिए। क्या मुझे वास्तव में कनवर्टर पर एक पैराग्राफ लिखने की ज़रूरत है? ओपी निश्चित रूप से ऐसा नहीं सोचता था, और आप शायद एकमात्र पाठक हैं जो इसकी अपेक्षा भी करेंगे। यदि आगे सॉर्टिंग * आवश्यक * है तो इसे प्रश्न में बताया जाना चाहिए। यदि मैं * मानता हूं कि एक निश्चित सॉर्टिंग की आवश्यकता होनी चाहिए, जैसा कि आप सुझाव देते हैं, तो उत्तर ओपी से पूछे जाने पर * अधिक * करता है। तो अंत में, क्या मुझे लगता है कि यह उत्तर ओरेकल और MySQL प्राकृतिक प्रकारों को इंगित करने से ओपी को अधिक मदद करता है? हाँ। –

1

क्या आप के लिए एक प्राकृतिक SORT है, जो नियमित रूप से तरह है कि ज्यादातर सिस्टम देने से अलग है कहा जाता है देख रहे हैं। मुझे स्टैक ओवरफ्लो में यहां कुछ हद तक पोस्ट मिली हैं जो विभिन्न लोकप्रिय एसक्यूएल इंजनों में प्राकृतिक प्रकारों को शामिल करती हैं, जिनमें SQL Server के बारे में एक संक्षिप्त चर्चा शामिल है।

यहां विचार आपको समाधान पर शुरू कर सकते हैं।

Oracle: How can I implement a "natural" order-by in a SQL query?

आप ही आपके एसक्यूएल इंजन का वाक्य विन्यास को बदलने के लिए हो सकता है।

MySQL के लिए एक और संस्करण मिला:

Natural Sort in MySQL

अभी तक एसक्यूएल सर्वर के लिए किसी भी नहीं मिल रहा।

Edit3

आह, यह एक कुछ एसक्यूएल सर्वर विचारों भी शामिल किया गया है:

Natural Sort in MySQL

+2

मुझे नहीं लगता कि इनमें से कोई भी लिंक समस्या को हल करने में कैसे मदद करता है। –

+0

@AaronBertrand - ओपी को एक प्राकृतिक प्रकार की आवश्यकता थी, हालांकि ओपी ने मेरा नाम उस शब्द का उपयोग नहीं किया था। चूंकि एसक्यूएल इंजनों में प्राकृतिक प्रकार का निर्माण नहीं होता है, इसलिए किसी को अभिव्यक्ति का उपयोग करके बनाया जाना चाहिए। मेरे लिंक एसक्यूएल के विभिन्न रूपों में प्राकृतिक प्रकार प्राप्त करने के विभिन्न तरीकों को कवर करते हैं। उनमें से एक अनुकूलित किया जा सकता था। –

+2

वैसे उन्हें ओरेकल या MySQL में इसकी आवश्यकता नहीं थी, और जैसा कि आप सुझाव देते हैं, MySQL उत्तर में SQL सर्वर के लिए कोई वैध उत्तर नहीं लगता है। मैंने पाया सबसे नज़दीकी था जिसमें 'MID' था लेकिन यह एक एक्सेस फ़ंक्शन है, SQL सर्वर नहीं। –

1

PATINDEX का उपयोग करें, यह SQL Fiddle कोड देखें। @AaronBertrand ने अभी जवाब दिया क्योंकि मैं परीक्षण कर रहा था।

बस कुछ और मूल्य और जानकारी जोड़ने के लिए, this SQLServerCentral link पर जांच करें क्योंकि आप अधिक उत्तरों पा सकते हैं।

और यह Natural (human alpha-numeric) sort in Microsoft SQL 2005, बहुत सारे उपयोगी उत्तरों और विविधताएं देखें।

+0

कुछ डाउनवॉटर क्या गलत हैं पर टिप्पणी कर सकते हैं? मैं पहले से ही उपयोगी उत्तर पर कुछ और जानकारी जोड़ रहा था ... धन्यवाद – Yaroslav

+2

ईएच, इस सवाल पर कुछ लोग खुश हैं। दस्तावेज प्रदान करने के लिए एक +1 है, न केवल एक जादू incantation जवाब। –

+1

मैंने डाउन-वोट नहीं किया (अभी तक) लेकिन आमतौर पर यदि आप किसी मौजूदा उत्तर में जानकारी जोड़ने की कोशिश कर रहे हैं, तो आप एक टिप्पणी जोड़ते हैं, अतिरिक्त जवाब नहीं। –