如何根据月份选择查询订购?

时间:2014-06-05 12:25:28

标签: sql sql-server sql-order-by

我有一个数据库表,我在这个格式中存储数据,比如2014年5月。我想根据月份从我的表中获取数据,即2014年5月,2014年4月,2014年3月。 2014年 请指导我的选择查询应该是什么?我的列数据类型是varchar(450) 我应该如何在我的选择查询中使用order by子句?我应该使用Group By子句吗?

2 个答案:

答案 0 :(得分:1)

这可能会对你有帮助。

我认为你可以创建一个单独的查找表(包括所有月份和年份)并加入你的源表

示例:

LookUp表

DECLARE @LUDTTABLE TABLE 
(ID INT IDENTITY(1,1), [YEAR] VARCHAR(20),[MONTH] VARCHAR(20))
INSERT INTO @LUDTTABLE VALUES 
('2014','JAN'),
('2014','FEB'),
('2014','MAR'),
('2014','APR'),
('2014','MAY'),
('2014','JUN'),
('2014','JUL')

来源表

DECLARE @TABLE TABLE (ID INT IDENTITY(900,1), DT VARCHAR(20))
INSERT INTO @TABLE VALUES
('JAN 2014'),
('JUL 2014'),
('FEB 2014'),
('FEB 2014'),
('APR 2014'),
('JAN 2014'),
('JAN 2014')

<强>结果:

SELECT  *
FROM    @TABLE A
JOIN    @LUDTTABLE B 
ON      LEFT(A.DT,3) = B.MONTH
    AND RIGHT(A.DT,4) = B.YEAR
ORDER BY B.ID

enter image description here

答案 1 :(得分:0)

如果您使用的是sql server 2008,则将列转换为日期格式并按月()

排序

使用以下代码段

 SELECT * FROM your_table_name  ORDER BY MONTH(CAST (your_column_name AS DATE))

对于以前的版本,请使用转换功能将varchar转换为datetime

SELECT * FROM your_table_name ORDER BY MONTH(CONVERT(datetime, your_column_name))