【问题标题】:ORDER BY apparently not working for Datetime column?ORDER BY 显然不适用于 Datetime 列?
【发布时间】:2019-01-08 17:32:42
【问题描述】:

我有一个使用此架构的每日日志的小表:

id (int, not null)
timestamp (datetime, not null)
costcenter (int, not null)
initials (varchar(3),null)
memo (varchar(250),not null)

ID 是一个自增的Identity 列。

这是我运行查询后的所有数据行

SELECT id, timestamp 
FROM LOG 
ORDER BY TIMESTAMP DESC

结果如下:

8   2018-12-30 10:51:08.000
7   2018-12-29 10:51:08.000
6   2018-12-13 10:51:08.000
5   2018-12-12 10:51:08.000
4   2018-01-04 08:31:00.000
3   2018-01-03 08:31:00.000
2   2018-01-02 08:45:00.000
1   2018-01-02 08:31:00.000

显然不是按时间戳降序排列!

如果我省略了DESC 关键字,则查询结果会按顺序(1-8)返回ID 列。所以看来我实际上是按 id 排序的,而不是时间戳。

我错过了什么吗?这是 ID 列的问题吗?

【问题讨论】:

  • 实际上,它IS完全按日期降序排序 - 或者您认为哪些行应该以不同的方式排序? ?
  • 是的...它按年、月、日、时、分、秒排序,这就是DATETIME 的排序方式。请注意,删除DESC 会应用默认排序操作ASC。从您的架构和表名来看,我希望按IDtimestamp 排序会得到相同的结果,因为ID 是自动递增的,我假设timestamp 是插入的记录也总是 > 上一条记录。
  • FWIW,当您省略 DESC 时,它将使用默认顺序作为 ASC 的顺序谓词。 :) 另外,请小心使用时间戳作为列名。它是一种数据类型,使用数据类型名称作为列或对象名称可能很难使用。
  • 天哪,一月份的值应该是 2019 年,而不是 2018 年。完全是我的错,我很抱歉浪费大家的时间!

标签: sql-server datetime sql-order-by


【解决方案1】:

我在一个名为 TIMESTAMP 的字段上遇到了一些问题,可能是因为它是一个保留字。 我已经在我的机器上进行了测试,它工作正常,如您所示,但问题可能取决于 SQL 版本。我会尝试强制系统将其识别为字段:

SELECT id, [timestamp] 
FROM LOG 
ORDER BY [TIMESTAMP] DESC

也可以:

SELECT id, [timestamp]
FROM LOG 
ORDER BY 2 DESC

甚至:

SELECT id, [timestamp] AS Time_Stamp
FROM LOG 
ORDER BY Time_Stamp DESC

【讨论】:

    【解决方案2】:

    你可以试试:

    SELECT id, timestamp 
    FROM LOG 
    ORDER BY TIMESTAMP + 1 DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2013-10-01
      • 1970-01-01
      • 2022-01-26
      • 2018-03-31
      • 1970-01-01
      相关资源
      最近更新 更多