问题是日期作为nvarchar()
存储在SQL数据库中,时间存储在单独的列中。我只有这个数据库的读访问权,所以我不能改变格式。此外,如果制造商发现,它可能会使我们的支持无效。
我认为我需要先将日期和时间合并为一个单元格作为日期时间,然后从当前时间中减去上一行。
ActualTime, ActualDate
5:30:26, 31-Dec-09
16:01:47, 31-Dec-09
17:35:50, 31-Dec-09
18:31:31, 31-Dec-09
18:51:03, 31-Dec-09
18:55:35, 31-Dec-09
19:26:53, 31-Dec-09
5:25:37, 1-Jan-10
5:38:36, 1-Jan-10
5:46:58, 1-Jan-10
6:27:00, 1-Jan-10
有几个人问过我用的是哪种语言。我希望在服务器上完成所有这些工作。在代码方面(C#),这是一个微不足道的问题。 就像我说的,我正在寻找一个SQL Server服务器端解决方案。
答案 0 :(得分:3)
在Microsoft SQL Server中,要在日期中转换列
Select Cast( ActualDate + ' ' + ActualTime AS DateTime)
比较两个日期
Select
Datediff(
second,
Cast('13-dec-2009 ' + '19:39:33' As DateTime),
Cast('13-dec-2009 ' + '19:26:33' As DateTime)
)
有关 DATEDIFF (Transact-SQL) 参数的详情。
要获得与当前日期/时间的差异,请使用GETDATE()
,
Select
*,
oldness = DateDiff(
second,
GETDATE(),
Cast(ActualDate + ' ' + ActualTime AS DateTime)
)
From
your_table
最后在行之间进行(对于整个表..),
Select *,
Cast(ActualDate + ' ' + ActualTime AS DateTime) as [fulldate],
DiffFromPrevious = Coalesce(
DateDiff(
second,
(
Select Top 1 Cast(ActualDate + ' ' + ActualTime AS DateTime) AS [fulldate]
From yourtable
Where Cast(ActualDate + ' ' + ActualTime AS DateTime) < Cast(t1.ActualDate + ' ' + t1.ActualTime AS DateTime)
Order By [fulldate] Desc
),
Cast(ActualDate + ' ' + ActualTime AS DateTime)
),
0)
From
yourtable t1
Order By
[fulldate] Asc
答案 1 :(得分:0)
您使用的是哪种语言,它是什么类型的数据库?我不确定数据库是否具有在查询中进行行操作的功能(从另一行中减去一行),因此您必须以编程方式执行此操作。我不确定您使用的语言是什么,但如果它有Date
或Time
API,那么您可以使用它来创建Date
对象。应该有一个函数返回自开始日期(1970年1月1日或其他东西)以来的总秒数。您创建两个Date
对象,转换为秒数然后减去它们。然后,您可以计算它们之间的天数。
答案 2 :(得分:-1)
如果您使用的是PHP,我建议您使用strtotime()函数将其转换为时间对象。这两个日期都这样做。差异将为您提供它们之间的秒数。