将varchar中的月份名称转换为日期,以便按月排序

时间:2013-10-11 13:51:54

标签: sql sql-server-2008

存在以字符串形式存储月份名称的表格。 我想按年份和月份订购,以便获得适当的结果。

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

我想按年份和月份订购。和2012,2013一样...... 一月,二月,行军....

我知道的方法 案件陈述时 月='一月'那么1 月 - 2月2日

但是我不想使用它,因为程序太大了。

2 个答案:

答案 0 :(得分:3)

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

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

然后将你的表映射到这里。 See a demo

答案 1 :(得分:1)

SELECT * 
FROM TABLE
ORDER BY [year] DESC,
         DATEPART(month,[Month] + ' 01 ' + CONVERT(VARCHAR(4),[YEAR]))

上面的代码会为您提供您想要的内容,但我强烈建议您重新考虑您的设计。

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

DATENAME ( month, DateField )