【问题标题】:Order by latest date按最晚日期订购
【发布时间】:2015-01-08 11:54:06
【问题描述】:

SQL

SELECT 
   CONVERT(VARCHAR, EffectiveTo, 105) as EffectiveTo 
FROM 
   CSchedules 
WHERE 
   CId = 3278 
ORDER BY 
   EffectiveTo ASC

日期

03-08-2014
03-09-2017
03-09-2017
03-09-2017
09-11-2014
14-12-2014
16-11-2014
16-11-2014
20-07-2014
20-12-2015
23-11-2014
24-08-2014
27-12-2015
27-12-2015
30-11-2014
31-08-2014
31-08-2014
31-08-2014

我需要按日期订购,以便:

03-09-2017

是列表中的第一个。但是它没有正确订购。基本上最晚的日期在前。

当按 DESC 排序时:

31-08-2014
31-08-2014
31-08-2014
30-11-2014
27-12-2015
27-12-2015
24-08-2014
23-11-2014
20-12-2015
20-07-2014
16-11-2014
16-11-2014
14-12-2014
09-11-2014
03-09-2017
03-09-2017
03-09-2017
03-08-2014

【问题讨论】:

  • Order by effectiveto desc 然后。此外,这些日期是否存储为varchar?如果是,那不是一件好事,您需要在订购前转换为日期时间。
  • ASC改成DESC怎么样?
  • 您还需要在 order by 中进行隐蔽以将其定义为 Datetime - 请参阅我的答案

标签: sql sql-server tsql


【解决方案1】:

您的EffectiveTo 列属于文本类型,例如varchar 而不是datedatetime。这是一个非常糟糕的设计。解决此问题的方法是:

SELECT 
   EffectiveTo 
FROM 
   CSchedules 
WHERE 
   CId = 3278 
ORDER BY 
   CONVERT(DATE, EffectiveTo, 105) DESC

这样,您将文本解析为 dd-mm-yyyy 格式的日期(即 105 参数),因此您可以对其进行正确排序。

如果您想显示与列中存储的文本不同的内容,您也可以选择在 SELECT 中进行转换。

【讨论】:

  • 哦,你的字段是 TEXT 类型而不是 datetime... 让我编辑一下。
  • 试试我现在发布的内容。
【解决方案2】:

您还需要在 order by 中设置隐蔽,以将其定义为 Datetime 而不是文本

SELECT CONVERT(VARCHAR, EffectiveTo, 105) AS EffectiveTo 
FROM CSchedules 
WHERE CId = 3278 
ORDER BY CONVERT(datetime, EffectiveTo, 105) DESC

【讨论】:

    【解决方案3】:

    只需按降序排列即可。 在最后一行放-

    Order by convert(varchar,effectiveto,112) desc
    

    【讨论】:

    • @Andrew ,如果我以 yyyymmdd 的形式订购,那么它将被正确订购。我没有告诉改变输出。输出将保持为 105
    • 但是您要再次将 EffectiveTo(具有“dd-mm-yyyy”格式 (105) 的 varchar 字段)转换为 varchar。这对数据没有影响。应将其转换为datedatetime,格式为105。
    【解决方案4】:

    您需要将其转换为日期,然后再订购。现在它不起作用,因为它认为它是字符串而不是日期

    SELECT 
    CONVERT(VARCHAR, EffectiveTo, 105) as EffectiveTo 
    FROM 
     CSchedules 
    WHERE 
     CId = 3278 
    ORDER BY 
     order by convert(datetime, EffectiveTo, 105) DESC
    

    【讨论】:

    • 106 是“dd mon yyyy”。
    • @Andrew 抱歉应该是 105
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2015-09-07
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多