将Unix时间戳转换为YYYYMMDD

时间:2015-12-02 10:50:15

标签: sql sql-server

我有一个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

不确定如何获得所需的结果

4 个答案:

答案 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)

您可以使用地图功能将UNIX时间戳转换为实际时间戳,如下所示:

from datetime import datetime
df3['creationdate'] = df3['createDate'].map(lambda d: datetime.fromtimestamp(int(d)))
df3.drop('createDate', axis=1, inplace=True) 
df3.head(7)

稍后您可以确认您新转换的日期时间是否为实际的python日期格式

enter image description here