我有一个SQL查询,它将我的数据库中的日期/时间戳列从UNIX时间戳转换为可读格式。这给了我一个很好的可读格式,但我想删除实际的时间戳并仅保留日期。因为我试图计算和分组所有出现的日期。
SELECT DATEADD(ss,msg.timestamp/1000,'01/01/1970')As DateTime
FROM dbo.cp_messages msg
结果目前看起来像这样:
2005-10-26 11:12:36.000
但我想:
2005-10-26
如何放弃时间。
评论有所帮助,但如何在日期之间进行搜索,因为我已将unix时间转换为正确的格式..我已尝试过以下但每次都会收到错误。
SELECT COUNT(msg.messageId)
,CONVERT(VARCHAR(10), DATEADD(ss, msg.[timestamp]/1000, '01/01/1970'), 120)
FROM dbo.cp_messages msg
WHERE timestamp >= DATEADD(DAY, -2, GETDATE())
GROUP BY timestamp
我似乎最终得到了每个实例的计数,但我之后所知的是当天的总数......
例如
1 2015-10-29
1 2015-10-29
1 2015-10-29
我希望
3 2015-10-29
不确定如何获得所需的结果
答案 0 :(得分:2)
要显示您可以使用的日期:
select convert(nvarchar(10), [DateTime], 120)
另外,要返回当天的开头,您可以使用
select dateadd(day, datediff(day, 0, [DateTime]) - 10, 0))
答案 1 :(得分:2)
SELECT CONVERT(VARCHAR(10), DATEADD(ss, msg.[timestamp]/1000, '01/01/1970'), 120)
FROM dbo.cp_messages msg
答案 2 :(得分:0)
问题的第二部分:
它为3行中的每一行提供了一个单独的行,因为您仍然在基础日期进行分组。因此,您可以获得具有不同基础时间的每个日期的组。但是,您只显示当天的第一部分,这就是您无法看到的原因。
相反,在当天开始分组:
SELECT COUNT(msg.messageId) as messageId
,CONVERT(VARCHAR(10), dateadd(day, datediff(day, 0, timestamp), 0), 120) as timestamp
FROM dbo.cp_messages msg
WHERE timestamp >= DATEADD(DAY, -2, GETDATE())
GROUP BY dateadd(day, datediff(day, 0, timestamp), 0)
答案 3 :(得分:0)