該場景是這樣的: 從某個表中選擇最大日期,當目標表沒有數據時,那麼最大日期爲空。當日期爲空時,我想獲得系統的最早日期,所以時代似乎是完美的。如何獲取SQL Server中的時代?
我已經搜索了包括DATEADD函數在內的一些方法,但看起來並不高雅。
該場景是這樣的: 從某個表中選擇最大日期,當目標表沒有數據時,那麼最大日期爲空。當日期爲空時,我想獲得系統的最早日期,所以時代似乎是完美的。如何獲取SQL Server中的時代?
我已經搜索了包括DATEADD函數在內的一些方法,但看起來並不高雅。
如果我正確理解你的問題,在SQL Server中的劃時代由cast(0 as datetime)
給出:
select Max(ISNULL(MyDateCol, cast(0 as datetime)))
from someTable
group by SomeCol
如果定義時代爲1970年1月1日:更好:將其存儲在一個變量
DECLARE @epoch DATETIME
SET @epoch = CONVERT(DATETIME, '01 JAN 1970', 106)
select
DATEPART(YEAR, DATEADD(day, 180, @epoch)) as year,
...
可以存儲在SQL日期時間字段的最早日期取決於您使用的數據類型:
datetime:
1753-01-01 through 9999-12-31
smalldatetime:
1900-01-01 through 2079-06-06
date, datetime2 and datetimeoffset:
0001-01-01 through 9999-12-31
個
更多具體細節請參閱從https://msdn.microsoft.com/en-GB/library/ms186724.aspx#DateandTimeDataTypes
如果您正在轉換的數字爲日期,但不相關的,如果你存儲日期爲日期的epoch是非常有用的。
如果您不想正確地處理空值,那麼簡單的答案就是選擇一個您知道的日期,並將其數據硬編碼到您的查詢中。 cast('1900-01-01' as datetime)
將在大多數情況下工作。
雖然使用類似cast(0 as datetime)
的東西會產生相同的結果,但會掩蓋您在代碼中完成的操作。有人維護它,想知道這些古老的日期從哪裏來,將能夠更快地發現硬編碼的日期。
可能重複[在mssql中有什麼等價的php時間()?](http://stackoverflow.com/questions/5942002/whats-the-equivalent-of-php-time-in-mssql) – Corbin 2012-04-01 02:56:44
等待...你的意思是在一個時代,特別是unix時代的時代嗎?此外,一個不存在的集合的最大值對我來說是有意義的。你爲什麼不喜歡空結果? – Corbin 2012-04-01 02:57:57
@Corbin:en ...我想用這個時間作爲where條件。所以,如果它是空的,我需要改變哪裏不是我的pretension。最後,對於這種情況來說,一個時代似乎是完美的,不需要在where子句中進行更改。 我明確了自己嗎?\ – freeman 2012-04-01 05:13:50