2011-10-08 121 views
6

我有兩列的表的第一列是(的currentdate)時間戳,而另一個是(dateReturn)日期時間column.ii需要從days.is這個號碼得到的currentdate和dateReturn之間的差可能?時間戳和日期時間

回答

9

不,這是不可能的。

與流行的觀點(和名稱本身)相反,timestamp實際上並不涉及時間

免責聲明:這個答案是特定於SQL Server(按問題的標籤),其他數據庫引擎可能會在這裏有不同的實現。 *

相反,它是穩步增加一個64位數字。數字的值在具有此類時間戳列的單個數據庫中的所有表之間共享。換句話說,如果你有兩個這樣的表,修改一行,並修改另一行中的行,第一個表中的時間戳的值將是X,而第二個表中的值是X + 1。

as per the documentation of timestamp

每個數據庫具有被遞增,其對包含在數據庫中的時間戳列的表中執行的每個插入或更新操作的計數器。該計數器是數據庫時間戳。這跟蹤數據庫中的相對時間,而不是可以與時鐘關聯的實際時間。

因此,該值與該行插入或上次修改的實際日期和/或時間無關,並且無法以任何方式轉換爲這樣的日期/時間。

一個timestamp列的唯一目的就是有一些獨特的東西,這是保證在增加。由於該值爲64位,因此您可以訪問18 446 744 073 709 551 616操作,在值重置之前需要使用timestamp列。如果你有一個數據庫可以每秒處理一百萬次這樣的操作,那麼在值重置之前,你仍然需要等待大約584 554年,所以我認爲它符合唯一性要求。

+0

大多數情況下,時間戳列表示類型爲「datetime」並且名稱爲「timestamp」的列。類型爲「timestmap」的列相對較少。 – Andomar

+4

在這種情況下,他特別說一列是日期時間,另一列是時間戳。 –

+0

換句話說,名字'currentdate',有點用詞不當。如果該字段應該保存最後一次修改(或初始插入)的日期和時間,那麼'timestamp'是錯誤的數據類型,並且日期時間列和觸發器或類似更合適。 –

4

在SQL Server timestamp數據類型不存儲日期或時間。它更多的是一個版本維護列,每更新一行就更新一次。所以,你應該重新考慮此列

-1

的數據類型,如果你的列有(比較少見)timestamp型,拉塞五卡爾森的回答是正確的。

如果兩列有datetime類型,您可以:

select datediff(day, dateReturn, currentdate) 
from YourTable 

datediff function