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开发者_如何学C: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?.
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!!
You can use sub query as follows
select convert(varchar,date,103) date from (select date from stock order by date)p
this one worked for me:
SELECT date FROM stock ORDER BY CAST(date AS DATE)
精彩评论