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