My table schema (table Name Stock)
Field
Date Datetime
If Date having datatype is Datetime then SQL Server sorts the date in well/perfect order. See Below Example.
select date from stock order by date
Then result is:
Date(yyyy/MM/dd) 2010-04-02 00:00:00.000 2011-02-02 00:00:00.000 2011-02-03 00:00:00.000 2011-02-03 00:00:00.000
But if I am going to sort the same by casting varchar than it will be ultimately create problem and the problem is it will not sort date by date order as it is now casting in Varchar.
Look at example below:
select date = convert(varchar, date, 103) from stock order by date
Then result is:
Date(dd/MM/yyyy) 02/02/2011 02/04/2010 03/02/2011 03/02/2011
You can see second query’s result that it will not sort date in order as because it is now not in datetime datatype. It is casting as varchar or you can say it as string.
Now come to the point that:
If I want to sort date which is casting in varchar order by date than how to do it?.
Advertisement
Answer
What you’re doing is converting a varchar to a varchar and then sorting by that… you’re not sorting by date!
convert(varchar, date, 103)
*********
This type here is what you convert your value into – you’re converting into a varchar – of course it won’t sort by date then!
Try this instead:
SELECT CONVERT(DATETIME, date, 103) FROM dbo.Stock ORDER BY CONVERT(DATETIME, date, 103)
NOW you’re actually converting your varchar column date to a DATETIME value, and sorting on that resulting DATETIME – and now you get the output:
2010-04-02 00:00:00.000 2011-02-02 00:00:00.000 2011-02-03 00:00:00.000 2011-02-03 00:00:00.000
Update: if you need another formatting, you can of course convert your DATETIME again, back into a VARCHAR using CONVERT with a different style:
Read all about what styles are supported in MSDN CAST and CONVERT
SELECT
date = CONVERT(VARCHAR, CONVERT(DATETIME, date, 103), 103) -- convert back to VARCHAR
FROM
dbo.Stock
ORDER BY
CONVERT(DATETIME, date, 103) -- sort by the DATETIME !
and then you get this output:
02/04/2010 02/02/2011 03/02/2011 03/02/2011
Just make sure to sort on the DATETIME value! (not on a string representation of your DATETIME)
And as I said: if you store your dates as DATETIME from the beginning, you’ll save yourself a lot of those conversion back and forth!!