C# 在SQL中,我想从前一行日期中减去一个日期

C# 在SQL中,我想从前一行日期中减去一个日期,c#,sql,C#,Sql,问题在于,日期作为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,

问题在于,日期作为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
有几个人问我用的是什么语言。我希望在服务器上完成所有这些。在代码方面,这是一个微不足道的问题。
就像我说的,我正在寻找SQL Server服务器端解决方案。

您使用的是什么语言,它是什么类型的数据库?我不确定数据库是否有能力在查询中将一行从另一行中减去一行来执行行操作,因此您必须以编程方式执行此操作。我不确定您使用的是什么语言,但是如果它有日期或时间API,那么您可以使用它来创建日期对象。应该有一个函数返回从1970年1月1日开始的总秒数。创建两个日期对象,转换为秒数,然后减去它们。然后,您可以计算它们之间的天数。

如果您使用的是PHP,我建议您使用strotime函数将其转换为时间对象。在两个日期都这样做。差异将给出它们之间的秒数。

在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)
            )
更多关于参数的信息

要获得与当前日期/时间的差异,请使用

最后,要在整个表的行之间执行此操作

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

你想找出两行之间的时间差吗?是的,但是请记住数据类型是varchari,我想我现在已经讨论了几乎所有的情况:OP要求一个SQL解决方案。
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