![](/img/trans.png)
[英]How to output dates into CSV file in DD/MM/YYYY format instead of DD/MM/YYYY HH:MM:SS
[英]How to sort dd/mm/yyyy format with group by dates?
SELECT CONVERT(NVARCHAR(15), TransDate, 103) AS TransDate,
Isnull(Sum(CONVERT(INT, Amount)), '0') AS Amount
FROM HMS_DiagnosisTransactions
WHERE TransDate BETWEEN '05/01/2015' AND '07/24/2015'
GROUP BY CONVERT(NVARCHAR(15), TransDate, 103)
ORDER BY CONVERT(NVARCHAR(15), TransDate, 103)
它顯示像
20/05/2015
20/06/2015
21/05/2015
22/07/2015
但我想要
20/05/2015
21/05/2015
20/06/2015
22/07/2015
將TransDate
包括在Group By
(截斷時間),然后可以在Order By
使用它:
SELECT CONVERT(NVARCHAR(15), TransDate, 103) AS TransDate,
Isnull(Sum(CONVERT(INT, Amount)), '0') AS Amount
FROM HMS_DiagnosisTransactions
WHERE TransDate BETWEEN '05/01/2015' AND '07/24/2015'
GROUP BY CONVERT(NVARCHAR(15), TransDate, 103), DATEADD(dd, DATEDIFF(dd, 0, TransDate), 0)
ORDER BY DATEADD(dd, DATEDIFF(dd, 0, TransDate), 0)
即使在SQL-Server 2005及更低版本中,此方法也有效。 2008年引入了沒有時間部分的Date
數據類型。 然后,您只需將其轉換為Date
:
SELECT CONVERT(NVARCHAR(15), TransDate, 103) AS TransDate,
Isnull(Sum(CONVERT(INT, Amount)), '0') AS Amount
FROM HMS_DiagnosisTransactions
WHERE TransDate BETWEEN '05/01/2015' AND '07/24/2015'
GROUP BY CONVERT(NVARCHAR(15), TransDate, 103), CAST(TransDate as Date)
ORDER BY CAST(TransDate as Date)
我假設分組實際上是有目的的,因此您需要使用分組的值。 將字符串轉換回日期:
ORDER BY CONVERT(DATETIME, CONVERT(NVARCHAR(15), TransDate, 103), 103)
也許您可以將年/月/日的值聲明為DATEPART
,也可以按它們分組,同時在派生表中進行所有這些操作。 然后,只需重新查詢即可。
SELECT T.TransDate, T.Amount
FROM (
SELECT CONVERT(NVARCHAR(15), TransDate, 103) AS TransDate
, COALESCE(SUM(CONVERT(INT, Amount)), '0') AS Amount
, DATEPART(DD, TransDate) AS DD
, DATEPART(MM, TransDate) AS MM
, DATEPART(YY, TransDate) AS YY
FROM HMS_DiagnosisTransactions
WHERE TransDate BETWEEN '05/01/2015' AND '07/24/2015'
GROUP BY CONVERT(NVARCHAR(15), TransDate, 103)
, DATEPART(DD, TransDate)
, DATEPART(MM, TransDate)
, DATEPART(YY, TransDate)
) AS T
ORDER BY T.YY, T.MM, T.DD;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.