下面的代码可以正常工作,但我想将日期的形状更改为“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