0

存在一个以字符串形式存储月份名称的表。我想按年份和月份排序以获得正确的结果。

year(string)  Month(string)  data
------------  ------------   ----
2012           August        bigbox
2012           December      samllbox
2013           April         samll box
2012           September     larg

我想按年和月订购。如 2012、2013... 一月、二月、三月....

当 Month = 'january' THEN 1 Month - FEB THEN 2 时,我知道 case 语句的方法

但我不想使用它,因为程序太大..

4

2 回答 2

3

您最好的选择是使用正确的日期类型。否则,创建一个表(内联或物理)来映射您的字符串月份。

SELECT 1 AS month, 'January' AS strMonth
UNION ALL
SELECT 2, 'February'
UNION ALL
SELECT 3, 'March'
...
SELECT 12, 'December'

然后映射这个你的表。查看演示

于 2013-10-11T13:54:58.767 回答
1
SELECT * 
FROM TABLE
ORDER BY [year] DESC,
         DATEPART(month,[Month] + ' 01 ' + CONVERT(VARCHAR(4),[YEAR]))

上面的代码会给你你想要的,但我强烈建议你重新考虑你的设计。

现在,您正在保留一个至少 15 个字符长的字符串类型字段。除了显示原因,该字段没有任何值。您可以有一个DATETIME更容易缩短的字段(不必在那里进行计算),如果您想显示月份的名称,您可以使用:

DATENAME ( month, DateField )
于 2013-10-11T13:54:12.890 回答