SQL:按日期顺序订购Month_year

时间:2019-03-22 11:37:06

标签: sql sql-server tsql

我有一个数据

Monthyear (varchar)       Value
Jan 2019                   55
Feb 2019                   66
Jan 2020                   78
Feb 2020                   45

当我选择以上语句作为

select * from datatable order by Monthyear

结果实际上是给我

 Monthyear (varchar)       Value
    Feb 2019                   66
    Feb 2020                   45
    Jan 2019                   55
    Jan 2020                   78

但是我想要按月份年份顺序。 我该如何解决?

2 个答案:

答案 0 :(得分:3)

您应将“月年”存储为日期(该月的第一个日期)或使用可排序的字符串(“ 2019-01”)。

但是,SQL Server非常擅长将字符串转换为日期,因此您可以使用:

order by convert(date, MonthYear)

这将按您想要的日期进行转换。

实际上,您可能希望将此添加到表中。说:

alter table datatable add yyyymm as (convert(date, MonthYear));

如果表中有很多数据,您甚至可以保留它并添加索引。

答案 1 :(得分:1)

您也可以使用CAST进行此操作。

SELECT *
FROM   datatable
ORDER  BY Cast(monthyear AS DATE)  

结果

+-----------+-------+
| Monthyear | Value |
+-----------+-------+
| Jan 2019  |    55 |
| Feb 2019  |    66 |
| Jan 2020  |    78 |
| Feb 2020  |    45 |
+-----------+-------+