2012-09-19 9 views
15

मैं SQL:2003 extension T611 में निर्दिष्ट अनुसार सभी परिणामों को अंतिम (NULLS LAST) के साथ अपना परिणाम सॉर्ट करना चाहता हूं। अफसोस की बात है, SQLite इसका समर्थन नहीं करता है। क्या कोई चालाक कामकाज है?SQLite में शून्य अंतिम कैसे करें?

उत्तर

17

यह काम कर सकता है?

SELECT ....... ORDER BY COALESCE(col1,col2,col3,etc) IS NULL 

मैं आपके शब्द "सभी नल कॉलम आखिरी" द्वारा उलझन में हूं। आप किसी खास कॉलम में पिछले सभी शून्य मान चाहते हैं, इस का उपयोग करें:

SELECT ....... ORDER BY col1 IS NULL 
+0

तुम्हारा मतलब नहीं है 'NULL' नहीं है (मैं SQLite के लिए किसी भी isnull समारोह भी नहीं मिला)? – dan04

+0

@ dan04 thx, आप सही हैं – mvds

+3

मुझे लगता है कि यह आखिरी नल पाने के लिए 'IS NULL' होना चाहिए :) – Blorgbeard

4

आप नकली यह करने के लिए कुछ इस तरह कर सकते हैं:

select * from test 
order by case ordercol when null then 1 else 0 end, ordercol 
+0

क्यों ऑर्डर नहीं है जब ऑर्डरकोल शून्य है तो 0 और 1, ऑर्डरोल'? जब कोई ऑर्डरोल में -100 से नीचे मान रखता है तो एक अजीब बग बचाता है। – mvds

+0

यह एक अच्छा मुद्दा है। मैंने अभी अपने सिर के ऊपर से एक अस्पष्ट उदाहरण लिखा है क्योंकि हम नहीं जानते कि डेटा कैसा दिखता है। लेकिन आपका सुधार सामान्य रूप से बेहतर काम करता है - इसे लागू किया! – Blorgbeard

15

जब मैं कुछ हद तक Blorgbeard के जवाब की तरह, इस प्रकार नहीं करता ' सही डेटाटाइप के वैध 'नकली' मूल्य की आपूर्ति करने के बारे में परवाह नहीं है।

ORDER BY CASE WHEN SOMECOL IS NULL THEN 1 ELSE 0 END, SOMECOL 

वैकल्पिक रूप से, भले ही आप नकली मूल्य का उपयोग करना चाहते हैं, तो मैं ISNULL पसंद करूंगा!

ORDER BY ISNULL(SOMECOL,-9999) 

जैसा कि माइकल ने नोट किया, SQLite IFNULL का उपयोग करता है। आप एएनएसआई-एसक्यूएल सार्वभौमिक संस्करण COALESCE का भी उपयोग कर सकते हैं।

+0

मामूली सुधार मुझे लगता है ... SQLite में, ISNULL IFNULL होना चाहिए। – Michael

+0

धन्यवाद @ माइकल, बेहतर जानकारी के साथ अपडेट किया गया – RichardTheKiwi

2

मैं एक ही समस्या में भाग गया। मुझे पता चला है कि यह काम कर सकता है:

order by ifnull(column_what_you_want_to_sort,'value in case of null') 
संबंधित मुद्दे