Order by with formatted dates,做对了吗?
Order by with formatted dates, doing it right?
我想要一个简单的健全性检查,因为我有一种轻微的感觉,我做错了。我将用例简化为一个非常简单的示例。
格式化日期时,我需要在 order 子句中强制转换数据以避免对 varchar 对象进行排序。然而。最初我希望 ORDER 子句能够与基本的 CONVERT(DATE, OrderDate) 一起运行。但是它会抛出一个明显的异常“列“OrderDate”在 ORDER BY 子句中无效,因为它既不包含在聚合函数中也不包含在 GROUP BY 子句中。”
如果我完全复制格式,它不会抛出这个错误。对我来说完全没有意义,首先必须格式化日期,然后再将其投回去。
工作正常但不得不在 order 子句中格式化感觉很尴尬
SELECT FORMAT (OrderDate,'MMM dd yyyy') AS OrderDate, SUM(Quantity) AS Quantity
FROM ORDERS
GROUP BY FORMAT (OrderDate, 'MMM dd yyyy')
ORDER BY CONVERT(DATE, FORMAT (OrderDate,'MMM dd yyyy')) ASC
不起作用
SELECT FORMAT (OrderDate,'MMM dd yyyy') AS OrderDate, SUM(Quantity) AS Quantity
FROM ORDERS
GROUP BY FORMAT (OrderDate, 'MMM dd yyyy')
ORDER BY CONVERT(DATE, OrderDate) ASC
我这样做正确吗?
只使用原来的列:
ORDER BY MIN(o.OrderDate)
如果没有必要,请不要开始尝试将日期转换为字符串并返回日期。
您可以在 ORDER BY
子句中使用聚合函数,因此您不需要将字符串转换回日期:
SELECT FORMAT(OrderDate,'MMM dd yyyy') AS OrderDate, SUM(Quantity) AS Quantity
FROM ORDERS
GROUP BY FORMAT(OrderDate, 'MMM dd yyyy')
ORDER BY MIN(OrderDate)
我想要一个简单的健全性检查,因为我有一种轻微的感觉,我做错了。我将用例简化为一个非常简单的示例。
格式化日期时,我需要在 order 子句中强制转换数据以避免对 varchar 对象进行排序。然而。最初我希望 ORDER 子句能够与基本的 CONVERT(DATE, OrderDate) 一起运行。但是它会抛出一个明显的异常“列“OrderDate”在 ORDER BY 子句中无效,因为它既不包含在聚合函数中也不包含在 GROUP BY 子句中。”
如果我完全复制格式,它不会抛出这个错误。对我来说完全没有意义,首先必须格式化日期,然后再将其投回去。
工作正常但不得不在 order 子句中格式化感觉很尴尬
SELECT FORMAT (OrderDate,'MMM dd yyyy') AS OrderDate, SUM(Quantity) AS Quantity
FROM ORDERS
GROUP BY FORMAT (OrderDate, 'MMM dd yyyy')
ORDER BY CONVERT(DATE, FORMAT (OrderDate,'MMM dd yyyy')) ASC
不起作用
SELECT FORMAT (OrderDate,'MMM dd yyyy') AS OrderDate, SUM(Quantity) AS Quantity
FROM ORDERS
GROUP BY FORMAT (OrderDate, 'MMM dd yyyy')
ORDER BY CONVERT(DATE, OrderDate) ASC
我这样做正确吗?
只使用原来的列:
ORDER BY MIN(o.OrderDate)
如果没有必要,请不要开始尝试将日期转换为字符串并返回日期。
您可以在 ORDER BY
子句中使用聚合函数,因此您不需要将字符串转换回日期:
SELECT FORMAT(OrderDate,'MMM dd yyyy') AS OrderDate, SUM(Quantity) AS Quantity
FROM ORDERS
GROUP BY FORMAT(OrderDate, 'MMM dd yyyy')
ORDER BY MIN(OrderDate)