如何按升序排序字符串格式日期?

时间:2014-03-13 08:40:07

标签: sql-server sql-server-2008 datetime

这是我的表格,以字符串格式选择日期

----------
SaleDate
---------- 
Jan 14
Feb 14
Mar 14
Nov 13
Dec 13
---------

并且,我希望这些选中的顺序应为升序,

----------
SaleDate
---------- 
Nov 13
Dec 13
Jan 14
Feb 14
Mar 14
---------

我怎么能以有序的方式获得约会,请帮助我。

3 个答案:

答案 0 :(得分:2)

强烈建议不要将日期值存储为varchar值。 反正

select * from dateTable
order by cast(('01 '+ saleDate) as datetime) asc

SQL FIDDLE DEMO

答案 1 :(得分:0)

一种可能的选择是按顺序使用案例

CREATE TABLE Table1
    ([SaleDate] varchar(10))
;

INSERT INTO Table1
    ([SaleDate])
VALUES
    ('Jan 14'),
('Feb 14'),
('Mar 14'),
('Nov 13'),
('Dec 13');


select * from table1
Order by
        cast(substring(saledate,5,2) as int),
    case 
        when substring(saledate,1,3)='Jan' then 1
        when substring(saledate,1,3)='Feb' then 2
        when substring(saledate,1,3)='Mar' then 3
        when substring(saledate,1,3)='Apr' then 4
        when substring(saledate,1,3)='May' then 5
        when substring(saledate,1,3)='Jun' then 6
        when substring(saledate,1,3)='Jul' then 7
        when substring(saledate,1,3)='Aug' then 8
        when substring(saledate,1,3)='Sep' then 9
        when substring(saledate,1,3)='Oct' then 10
        when substring(saledate,1,3)='Nov' then 11
        when substring(saledate,1,3)='Dec' then 12
    end

答案 2 :(得分:0)

使用以下查询

select a.SaleDate  from  (
select SaleDate
,Case WHEN substring(SaleDate,1,3) = 'JAN' THEN 1
          WHEN substring(SaleDate,1,3) = 'FEB' THEN 2
          WHEN substring(SaleDate,1,3) = 'MAR' THEN 3 
           WHEN substring(SaleDate,1,3) = 'APR' THEN 4 
           WHEN substring(SaleDate,1,3) = 'MAY' THEN 5 
           WHEN substring(SaleDate,1,3) = 'JUN' THEN 6 
        WHEN substring(SaleDate,1,3) = 'JUL' THEN 7 
        WHEN substring(SaleDate,1,3) = 'AUG' THEN 8 
        WHEN substring(SaleDate,1,3) = 'SEP' THEN 9 
           WHEN substring(SaleDate,1,3) = 'OCT' THEN 10 
           WHEN substring(SaleDate,1,3) = 'NOV' THEN 11
          WHEN substring(SaleDate,1,3) = 'DEC' THEN 12            END  AS MON
          , Substring(SaleDate,len(SaleDate)-2,len(SaleDate))          AS YEAR1   
           from Table1 
            )   a order by YEAR1,MON