2014-03-13 68 views
1

這裏是我的表,在字符串格式如何以升序排列字符串格式日期?

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

選擇的日期和,我想這些選擇應該是升序的,

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

我怎麼能得到有序的方式日期,請大家幫幫我。

+0

請出示您使用格式化SQL和表模式 – Tanner

+4

明顯要做的事情就是停止存儲日期爲字符串。 SQL Server有幾種體面的數據類型用於處理日期。字符串類型不在該集合中。 –

+0

選擇權(CONVERT(varchar(10),getdate(),6),6) –

回答

0

一個可能的選擇是在ORDER BY

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

強烈建議不要保存日期值作爲VARCHAR值時使用的情況。 不管怎麼說

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

SQL FIDDLE DEMO

+0

雅,我知道MHasan但'3月13日'類型的日期必須動態顯示,這就是爲什麼我需要這樣做 –

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 
相關問題