存在以字符串形式存储月份名称的表格。 我想按年份和月份订购,以便获得适当的结果。
year(string) Month(string) data
------------ ------------ ----
2012 August bigbox
2012 December samllbox
2013 April samll box
2012 September larg
我想按年份和月份订购。和2012,2013一样...... 一月,二月,行军....
我知道的方法 案件陈述时 月='一月'那么1 月 - 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 )