August 7, 2012 at 6:39 am
I have month field in format as JAN-12 with data type varchar. Now i wan to order by this field converting it into date like jun-12 then jul-12. Currently it orders like jul-12 then jun-12 as it is in varchar format. So how can this be achieved?
August 7, 2012 at 6:45 am
You can add another column 'YearMonth' in which u should store values like '201201','201202'....
If u do this, u can sort month field easily
August 7, 2012 at 7:59 am
You can order by the datetime column, even if you don't include it in the select list.
-- Gianluca Sartori
August 7, 2012 at 8:02 am
any solution is going to involve some sort of convert text to date , or a hard coded CASE statement int he order by.
can you fix the incoming data to return a datetime instead of the text version you are currently receiving?
this is a quick and dirty bandaid:
SELECT * FROM SOMETABLE
ORDER BY
CASE
WHEN monthfield LIKE 'jan%' THEN 1
WHEN monthfield LIKE 'feb%' THEN 2
WHEN monthfield LIKE 'mar%' THEN 3
WHEN monthfield LIKE 'apr%' THEN 4
WHEN monthfield LIKE 'may%' THEN 5
WHEN monthfield LIKE 'jun%' THEN 6
WHEN monthfield LIKE 'jul%' THEN 7
WHEN monthfield LIKE 'aug%' THEN 8
WHEN monthfield LIKE 'sep%' THEN 9
WHEN monthfield LIKE 'oct%' THEN 10
WHEN monthfield LIKE 'nov%' THEN 11
WHEN monthfield LIKE 'dec%' THEN 12
ELSE 13
END,monthfield
Lowell
August 7, 2012 at 8:27 am
USE [tempdb]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[testmonths]') AND type in (N'U'))
DROP TABLE [dbo].[testmonths]
GO
CREATE TABLE [dbo].[testmonths](
[testMonth] [varchar](50) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[testmonths]([testMonth])
SELECT N'May-11' UNION ALL
SELECT N'May-12' UNION ALL
SELECT N'May-13' UNION ALL
SELECT N'Jun-12' UNION ALL
SELECT N'Jul-12' UNION ALL
SELECT N'Aug-13' UNION ALL
SELECT N'Jun-11' UNION ALL
SELECT N'Jul-11' UNION ALL
SELECT N'Aug-11' UNION ALL
SELECT N'Aug-12' UNION ALL
SELECT N'Jun-13' UNION ALL
SELECT N'Jul-13'
SELECT testMonth
FROM testmonths
ORDER BY CONVERT( datetime , '01-' + testMonth );
________________________________________________________________
you can lead a user to data....but you cannot make them think
and remember....every day is a school day
August 7, 2012 at 11:02 pm
Thnx... J Livingston SQL it did worked...
August 8, 2012 at 12:07 am
pls try below code
declare @t1 table(id varchar(10))
insert into @t1(id)values('Jan-12'),('Feb-12'),('Mar-12'),('APR-12')
select *,convert(date,convert(varchar(10),'01'+'-'+id)) new from @t1
order by 2
Viewing 7 posts - 1 through 6 (of 6 total)
You must be logged in to reply to this topic. Login to reply