下面的代碼可以正常工作,但我想將日期的形狀更改爲「2017年3月1日「而不是 」2017年3月1日「SQL:顯示「2017年3月01日」而不是「2017-03-01」與組
SELECT
*
FROM
(
SELECT
[MessageType].[Name],
CASE WHEN (Format([OccuredAtUtc], 'yyyy-MM-dd') LIKE '2017-03%') THEN Format([OccuredAtUtc], 'yyyy-MM-dd')
ELSE NULL
END AS [Time],
COUNT(*) AS [Count]
FROM @Table
INNER JOIN @Table ON
GROUP BY Format([OccuredAtUtc], 'yyyy-MM-dd'),
[MessageType].[Name]
) s
WHERE ([Time] IS NOT NULL)
ORDER BY [Time] ASC
OUTUPUT:
NAME_______TIME______COUNT____
HTTP 2017-03-01 21
HTTP 2017-03-02 37
HTTP 2017-03-03 42
.
.
HTTP 2017-03-31 29
- 但是,如果使用CONVERT(VARCHAR(11),[OccuredAtUtc],106)THEN在我的代碼後,有一個與GROUP()的一個問題 ING所以我沒有得到的日期計算正確了
一下如果我嘗試使用 CONVERT(VARCHAR 11 [OccuredAtUtc],106)代碼:
//一切變爲被comented ... 2個東西
SELECT
*
FROM
(
SELECT
[MessageType].[Name],
CASE WHEN (Format([OccuredAtUtc], 'yyyy-MM-dd') LIKE '2017-03%') THEN CONVERT(VARCHAR(11), [OccuredAtUtc], 106) --Format([OccuredAtUtc], 'yyyy-MM-dd')
ELSE NULL
END AS [Time],
COUNT(*) AS [Count]
FROM @Table
INNER JOIN @Table ON
GROUP BY [OccuredAtUtc], --Format([OccuredAtUtc], 'yyyy-MM-dd')
[MessageType].[Name]
) s
WHERE ([Time] IS NOT NULL)
ORDER BY [Time] ASC
我得到這個NON GROUPED OUTPUT:
HTTP 01 Mar 2017 1
HTTP 01 Mar 2017 1
HTTP 01 Mar 2017 1
HTTP 01 Mar 2017 2
HTTP 01 Mar 2017 1
HTTP 01 Mar 2017 1
.
.
HTTP 02 Mar 2017 1
.
.
HTTP 31 Mar 2017 1
想有一些問題與數據類型
或與GROUP BY [OccuredAtUtc] ...(從端部5行) ...如果我在GROUP BY中使用整個「CONVERT(VARCHAR(11),[OccuredAtUtc],106)」,則會跳出一個錯誤
這是否有一些簡單的解決方案?我只需要獲得格式,與「2017年3月1日」的日期輸出...
在[OccuredAtUtc]原日期:
2017-03-01 12:16:58.5080000
2017-03-01 18:11:53.3090000
2017-03-01 18:34:18.3090000
2017-03-01 20:42:28.8570000
2017-03-01 21:10:36.7070000
.
.
.
預先感謝您!
而是使用的轉換在內部選擇查詢。你可以嘗試在外部選擇轉換,取代選擇*使用選擇colnames,轉換(varchar(11),datecolumn,106) – Kapil