首页 > 解决方案 > T-SQL 选择不同的格式化日期时间,同时仍排序为未格式化的日期时间

问题描述

我正在处理的服务器上只有 SELECT 权限。我正在尝试编写一个查询,其中一列是格式化的日期时间:

--mydb.EventDate is column EventDate(datetime, not null)

SELECT DISTINCT
    FORMAT(mydb.EventDate, 'M/d/yyyy h:mm:ss tt') as 'EventDate',
    [Other Specified Columns]
FROM
    mytsqldb.myschema.mytable AS mydb
ORDER BY 
    EventDate, [Other Specific Columns]

我还需要按时间顺序按事件日期排序。但是,使用这种格式,它会按字母顺序排序(我认为)。由于 SELECT DISTINCT,我在 ORDER BY 时无法转换 EventDate。但是,我不希望将任何其他列添加到查询的输出中。日期时间的格式有点重要,但如果需要我可以放弃那个幽灵。我正在寻找的可能吗?

标签: sql-servertsqldatetimeformatdistinct

解决方案


而不是DISTINCT使用GROUP BY

SELECT 
  FORMAT(mydb.EventDate, 'M/d/yyyy h:mm:ss tt') as 'EventDate',
  [Other Specified Columns]
FROM mytsqldb.myschema.mytable as mydb
GROUP BY mydb.EventDate, FORMAT(mydb.EventDate, 'M/d/yyyy h:mm:ss tt'), [Other Specified Columns]
ORDER BY mydb.EventDate, [Other Specific Columns]

或使用子查询:

SELECT FORMAT(t.EventDate, 'M/d/yyyy h:mm:ss tt') AS EventDate, [Other Specified Columns]
FROM (
  SELECT DISTINCT
    mydb.EventDate,
    [Other Specified Columns]
  FROM mytsqldb.myschema.mytable as mydb 
) AS t
ORDER BY t.evDate, [Other Specific Columns]

推荐阅读