sql查询两个日期之间的日期差异

时间:2012-03-22 21:16:07

标签: sql sql-server-2008

我正在尝试做一些我不知道是否可行的事情。我有这个问题:

SELECT [CreatedOn]
  来自[MyTable]

printscreen

正如您在图片中看到的,有不同的日期。现在我想要实现的是获得每一行中每个日期/时间之间的时差。例如,row1和row2中的日期,然后是row2和row3等之间的差异...... 那可能吗? 谢谢,Laziale

4 个答案:

答案 0 :(得分:4)

您可以创建一个带行号的cte,然后在下一行创建外部联接以获取datediff

;with t as (
    SELECT 
        [CreatedOn],
        rn = row_number() over(order by [CreatedOn])
    FROM 
        [MyTable]
)

select
    t.[CreatedOn],
    secondsTilNext = datediff(s, t.[CreatedOn], tnext.[CreatedOn])
from
    t
    left outer join t tnext on tnext.rn = t.rn + 1

答案 1 :(得分:3)

;WITH q AS (
SELECT
    CreatedOn,
    ROW_NUMBER() OVER (ORDER BY CreatedOn) AS rn
FROM
    MyTable
)
SELECT
    q1.CreatedOn AS Date,
    q2.CreatedOn AS NextDate,
    DATEDIFF(SECOND, q1.CreatedOn, q2.CreatedOn) AS SecondDiff
FROM 
    q q1 JOIN
    q q2 ON q1.rn + 1 = q2.rn

答案 2 :(得分:0)

假设您使用C#访问数据,这里有一个很好的参考:http://msdn.microsoft.com/en-us/library/aa287590(v=vs.71).aspx

基本上,代码是

DateTime oldDate = new DateTime(2002,7,15);
DateTime newDate = DateTime.Now;
// Difference in days, hours, and minutes.
TimeSpan ts = newDate - oldDate;
// Difference in days.
int differenceInDays = ts.Days;

您使用的任何.NET语言都应该支持与此类似的内容。我在Python中做了很多次同样的事情。

答案 3 :(得分:0)

尝试约会MSDN Datediff

或者

    cast((date1-date2) as varchar(255))

语法可能有问题,我现在无法检查它。