2012-03-22 204 views
1

我想做一些事情,我不知道它是否可行。我有这个疑问:两个日期之间的SQL查询日期差异

SELECT [CreatedOn]
FROM [MyTable的]

printscreen

正如你可以在图片中看到,有不同的日期。现在我想实现的是获得每行中每个日期/时间之间的时间差。例如,第1行和第2行之间的差异,第2行和第3行等等...... 这可能吗? 谢谢,Laziale

+2

超前滞后功能可以做到这一点。 – Randy 2012-03-22 21:17:09

+0

@Randy:但是我们需要等到SQLServer 2012发布。 – a1ex07 2012-03-22 21:19:22

回答

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

+1哈哈我揍你了 – dotjoe 2012-03-22 21:27:15

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中多次做了同样的事情。

0

尝试DATEDIFF MSDN Datediff

或许

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

语法可能是错误的,我不能在此刻检查。

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

s代表什么?我在这里得到错误:http://gyazo.com/a88835cb955dedd5785b9a3b833717e1 – Laziale 2012-03-22 21:31:00

+0

+1打我。 – 2012-03-22 21:31:20

+0

@拉齐亚勒的''代表秒......它会给你两个日期之间的秒数。你得到那个错误是因为你需要''''''后面的'[CreatedOn]'''''''''''''。 – 2012-03-22 21:33:32