我可能在閱讀過多的問題,但如果您的目標是計算從給定日期(今天?)到存儲在表格中的日期的年齡(以天爲單位),那麼您會更好使用DATEDIFF function並在每次查詢時計算其值。
例如:
-- Option 1: Compute when you query it each time in the query you require it
SELECT d.[Date], DATEDIFF(dd, d.[Date], CONVERT(DATE, GETDATE())) as [Age]
FROM tblDates AS d
您也可以定義你的表作爲計算列Age列,如果它會經常不夠用,或包裹表在視圖中嵌入這個計算:
-- Option 2: Compute at query time, but build the computation into the table definition
CREATE TABLE [dbo].[tblDates] (
[Date] DATE NOT NULL,
[AgeInDaysComputed] AS (DATEDIFF(dd, [Date], CONVERT(DATE, GETDATE())))
)
GO
-- Option 3: Compute at query time, but require caller interact with a different object
-- (view) to get the computation
CREATE VIEW [dbo].[vwDates]
AS
SELECT d.[Date], DATEDIFF(dd, d.[Date], CONVERT(DATE, GETDATE())) as [AgeInDays]
FROM dbo.tblDates AS D
GO
關於GETDATE函數的一個注意事項:您需要知道您的服務器時區,因爲GETDATE根據您服務器的本地時區返回日期。只要你的服務器配置和用戶的配置都在同一時區,這應該提供正確的結果。 (如果以天爲單位的年齡是你想要計算的,你可能想要編輯你的問題以更好地反映這個意圖,爲未來的讀者帶來好處,因爲它與「重新排列列的價值」有很大的不同「)
您需要更好地定義」年齡「是如何計算的。它是按照日期排序的簡單的行編號嗎?如果日期重複或缺失,該怎麼辦?另外爲什麼你需要存儲這個值? – 2014-12-07 18:44:01
然後用desc對年齡進行聚集索引。爲什麼要使用SQL,TSQL,2008和2012.它不能是所有這些東西。 – Paparazzi 2014-12-07 18:46:57
RDBMS中行的順序是不相關的。使用ORDER BY子句按特定順序查看行。 – 2014-12-07 19:00:43