我的数据库中有一个表,其中包含一个名为DateTimes的列。这个列里面有DateTime数据,我想选择这个表有数据的不同小时数。例如,如果列包含以下条目:
2015-05-03 01:06:45
2015-05-03 04:51:09
2015-05-03 05:08:11
2015-05-03 09:33:35
2015-05-03 13:46:38
我想返回
2015-05-03 01:00:00
2015-05-03 04:00:00
2015-05-03 05:00:00
2015-05-03 09:00:00
2015-05-03 13:00:00
我尝试了以下返回错误:
SELECT DateTimes
FROM MyTable
GROUP BY DATEPART(hh, DateTimes)
我觉得这应该很容易,但我似乎无法做到(我对SQL很新)。我使用MS SQL Management Studio 2012访问我的数据库。
答案 0 :(得分:1)
你真正想要的是格式化你的日期,所以它隐藏了分钟/秒,
SELECT CONVERT(VARCHAR(25), DateTimes, 100) FROM MyTable
答案 1 :(得分:1)
尝试以下方法:
SELECT DateTimes
FROM MyTable
GROUP BY DATEPART(hh, DateTimes), DateTimes;
您只是在组中直接错过了DateTimes字段。
此外,根据您提出的其他问题,您可能需要执行以下操作:
SELECT FORMAT(DateTimes, 'dd-MM-yyyy hh:00:00', 'en-US')
FROM MyTable
GROUP BY DATEPART(hh, DateTimes), FORMAT(DateTimes, 'dd-MM-yyyy hh:00:00', 'en-US');
答案 2 :(得分:1)
试试这个。
测试数据:
DECLARE @MyTable AS TABLE(DateTimes DATETIME)
INSERT INTO @MyTable(DateTimes)
VALUES('2015-05-03 01:06:45')
,('2015-05-03 04:51:09')
,('2015-05-03 05:08:11')
,('2015-05-03 09:33:35')
,('2015-05-03 13:46:38')
查询:
SELECT Hourly
FROM (SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, DateTimes), 0) AS Hourly
FROM @MyTable) AS DatesAsHours
GROUP BY Hourly
结果:
Hourly
2015-05-03 01:00:00.000
2015-05-03 04:00:00.000
2015-05-03 05:00:00.000
2015-05-03 09:00:00.000
2015-05-03 13:00:00.000
答案 3 :(得分:0)
您需要在select中指定格式。在Group By中执行DATEPART将导致具有相同小时的行位于同一组中。此外,DATEPART仅返回日期时间的小时部分。
您可以尝试使用DATE_FORMAT函数,例如:
select DATE_FORMAT(DateTimes, "%Y-%m-%d %H:00:00") from MyTable
有关可用的格式选项,请参阅DATE_FORMAT的手册页。