2012-03-22 203 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