You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在datetime转char后按原日期排序?解决DISTINCT排序报错

问题:带DISTINCT的日期格式化后按原datetime列排序报错

我有一个datetime类型的列,想要把日期以dd/mm/yyyy格式展示,执行了下面的SQL语句:

Select distinct CONVERT(VARCHAR(10), [DateAndTime], 103) as [DateAndTime]
from dbo.Prod
order by dbo.Prod.[DateAndTime]

结果报错:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified

去掉ORDER BY子句后,得到的结果是无序的:

DateAndTime
03/03/2023
16/02/2023
17/02/2023
21/02/2023

解决办法

用GROUP BY替代DISTINCT

GROUP BY不需要将排序字段加入SELECT列表,先按原datetime列分组(自动完成日期去重),再格式化输出并排序:

SELECT CONVERT(VARCHAR(10), [DateAndTime], 103) AS [DateAndTime]
FROM dbo.Prod
GROUP BY [DateAndTime]
ORDER BY [DateAndTime]

用子查询/CTE先去重再排序

先通过子查询获取去重后的原日期和格式化日期,外层只取格式化后的日期并按原日期排序:

WITH DistinctDates AS (
    SELECT DISTINCT
        [DateAndTime],
        CONVERT(VARCHAR(10), [DateAndTime], 103) AS [FormattedDate]
    FROM dbo.Prod
)
SELECT [FormattedDate] AS [DateAndTime]
FROM DistinctDates
ORDER BY [DateAndTime]

错误原因说明

使用DISTINCT时,ORDER BY的字段必须存在于SELECT列表中。原语句里排序用的是原datetime列,但它不在SELECT列表里,因此触发报错。上面两种方法都能避开这个限制,同时保证结果按原datetime的日期顺序排列。

内容的提问来源于stack exchange,提问作者dNaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:30:11