【问题标题】:Sort datetime varchar排序日期时间 varchar
【发布时间】:2019-07-03 12:34:38
【问题描述】:

我正在寻求帮助。我有一个日期字段作为日期时间 YYYY/MM/DD HH:MM:SS,我需要它是 DD/MM/YYYY HH:MM:SS。然后我使用了 convert(varchar) 但不能按 desc 排序,显示这个:

31/01/2019 17:00:00:000
31/01/2019 17:00:00:000
18/01/2019 13:30:00:000
18/01/2019 13:30:00:000
07/02/2019 03:00:00:000
07/02/2019 03:00:00:000
14/02/2019 12:00:00:000

CONVERT(VARCHAR(10),ISNULL(tbl_date1,tbl_date2),103) + ' ' + CONVERT(VARCHAR(20),ISNULL(tbl_date1,tbl_date2),14)

我不知道如何在 sql 中执行此操作。我已经厌倦了演员和转换,我一直得到相同的结果。

我一直在搜索,尝试不同的方法,但没有得到结果。任何帮助都会非常感激,谢谢!

【问题讨论】:

  • 您可以在返回格式化的 VARCHAR 值的同时按 DATETIME 值排序。
  • 您不必按 varchar 列排序,您可以创建 varchar 列作为输出并仍然按原始日期时间列排序。我认为这是错误的,但不确定,因为我没有看到实际的查询。
  • 是的,我试过了,但我遇到了和以前一样的问题:如果指定了 SELECT DISTINCT,ORDER BY 项目必须出现在选择列表中
  • 再次,您需要包含产生该错误消息的实际完整查询。最后一行代码不是会产生该错误消息的查询。
  • 是的,当然。完成

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

试试这个:

SELECT *
     ,CONVERT(VARCHAR(10),ISNULL(tbl_date1,tbl_date2),103) + ' ' + CONVERT(VARCHAR(20),ISNULL(tbl_date1,tbl_date2),14)
FROM ...
ORDER BY ISNULL(tbl_date1,tbl_date2) DESC

【讨论】:

  • @BRKZ 只需将 ISNULL(tbl_date1,tbl_date2) 添加到您的 SELECT 查询中 - 例如作为最后一列。
  • 这是个好办法。但是这个报告会自动下载到excel并运行宏。还有其他方法可以解决这个问题吗?
  • @BRKZ 那么,当使用 DISTINCT 时,无法从列表中排除该列。
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2014-06-07
  • 2011-05-03
  • 1970-01-01
相关资源
最近更新 更多