如何在SQL Server中获取纪元时间?

fre*_*man 7 sql-server epoch

场景是这样的:当目标表没有数据时,从某个表中选择最大日期,因此最大日期为空.当日期为空时,我想获得系统的最早日期,因此时代似乎是完美的.

我已经搜索了一些方法,包括DATEADD函数,但这似乎并不优雅.

Mit*_*eat 9

如果我理解你的问题,在SQL Server中,时代由下式给出cast(0 as datetime):

select Max(ISNULL(MyDateCol, cast(0 as datetime)))
from someTable
group by SomeCol
Run Code Online (Sandbox Code Playgroud)


Ste*_*ner 5

可以存储在SQL datetime字段中的最早日期取决于您使用的数据类型:

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
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅https://msdn.microsoft.com/en-GB/library/ms186724.aspx#DateandTimeDataTypes

时代,如果你正在转换的数字为日期,但不相关的,如果你存储日期为日期是非常有用的.

如果您不想正确处理空值,那么简单的答案就是选择一个您知道将在数据之前的日期并将其硬编码到查询中.cast('1900-01-01' as datetime)在大多数情况下都会有用.

使用类似的东西cast(0 as datetime)会产生相同的结果,但它会掩盖你在代码中所做的事情.维持它的人,想知道这些奇怪的旧日期来自何处,将能够更快地发现硬编码日期.