Friday 19 July 2013

The Story of 'ASC' & 'DESC' in SOQL


Recently , I was trying to implement the masterpiece of JavaScript & Jeff Douglas > Dynamic Search Functionality which was getting parameters and searching the records in real time.

I was doing well but then I stuck at a issue pointed by my MIS head stating that Sorting doesn't work for the Null records and I was asked to fix this so that whenever we sort on the basis of a column , the records with null values should not come over first , they should be placed in last.

I was sorting on the basics of Registration Number but I was not getting all the null records in first. It was killing me and my time.

I was using database.query to give get the records sorted when we click on label Registration Number:-

SELECT  Id, Reg_Num FROM Courses__c order by Reg_Num DESC.




So I carved out a path with the the best friend of all developers "Google".

Keyword : NULLS LAST

SELECT  Id, Reg_Num FROM Courses__c order by Reg_Num DESC NULLS LAST


Here is what I got the explanation...


The Default Sorting of NULLs is DBMS dependent. Some of them sort at the end and some at the beginning. Salesforce does it in beginning. So, only way to ensure this is to use NULL FIRST/LAST if the DBMS supports it.

In standard SQL (and most modern DBMS like Oracle, PostgreSQL, DB2, Firebird, Apache Derby, HSQLDB and H2) you can specify keyword NULLS LAST or NULLS FIRST.

The usage of isnull() or other functions is a workaround for the missing support for NULLS.

So , I wrote this down so that I could save someone's life and important time which he would spend while consulting the best buddy "Google".

Hope this writing helps you in the thing which you were looking for.

Happy Sorting !