【问题标题】:How to order String format dates in ascending order?如何按升序排列字符串格式的日期?
【发布时间】:2014-03-13 08:40:06
【问题描述】:

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

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

而且,我希望这些选择应该按升序排列,

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

如何按顺序获取日期,请帮帮我。

【问题讨论】:

  • 请显示您用于格式化和表模式的 sql
  • 显而易见的做法是停止将日期存储为字符串。 SQL Server 有几种不错的数据类型来处理日期。字符串类型不在该集合中。
  • 右选(CONVERT(varchar(10),getdate(),6),6)

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


【解决方案1】:

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

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

SQL FIDDLE DEMO

【讨论】:

  • 是的,我知道 MHasan,但“3 月 13 日”类型的日期必须动态显示,这就是我需要这样做的原因
【解决方案2】:

一种可能的选择是在 order by 中使用 case

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

【讨论】:

    【解决方案3】:

    使用下面的查询

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 2021-09-06
      • 2015-01-27
      • 2018-10-17
      相关资源
      最近更新 更多