2015-12-02 110 views
-1

我有一个SQL查询将我的数据库中的日期/时间戳列从UNIX时间戳转换为可读格式。这给了我一个很好的可读格式,但我想删除实际的时间戳,并只保留日期..因为我试图计数和分组的所有日期只。转换Unix时间戳iinto YYYYMMDD

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 

不知道如何得到期望的结果

+1

的[?我如何转换BIGINT(UNIX时间戳),在SQL Server日期时间]可能的复制(http://stackoverflow.com/questions/2904256/how-can-i-convert-bigint-unix -timestamp-datetime-in-sql-server) – Ben

+0

除了答案之外,如果未在YYYY-MM-DD格式中指定,请注意日期格式,因为10-01-1970可以是10月1日或10月1日!在导入数据之前,请检查SET DATEFORMAT DMY以强制使用日期格式。 –

回答

2
SELECT CONVERT(VARCHAR(10), DATEADD(ss, msg.[timestamp]/1000, '01/01/1970'), 120) 
FROM dbo.cp_messages msg 
+0

Brillant时,我最终得到一个错误,那就是我想要的。你能解释一下(varchar(10)和120在最后。 – Boardman411

2

要只显示日期,你可以使用这个:

select convert(nvarchar(10), [DateTime], 120) 

Alternativly,返回一天的开始,你可以用疑问的

select dateadd(day, datediff(day, 0, [DateTime]) - 10, 0)) 
+0

现在我已经将mydate转换为正确的格式,我如何查找几天前的所有记录。当我比较 – Boardman411

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) 
+0

似乎不适合我...什么是(-10,0)在行尾做了什么,我得到一个错误,关于msg.timestamp在选择列表中无效,因为它不包含在聚合函数或GROUP BY函数中。如果我添加了msg。messageID,然后我得到一个算术o/f – Boardman411

+0

嗯,不完全确定-10从哪里来,已经删除它。还更新了选择以希望删除该错误。很抱歉 - 无法对其进行测试,因为您尚未提供任何用于测试的示例数据! – BeanFrog

+0

将表达式转换为数据类型的算术溢出错误datetime - 列中的数据只是messageId的ID(数字)和时间的Unix时间戳。 – Boardman411