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

时间:2012-04-01 02:52:05

标签: sql-server epoch

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

我搜索了一些方法,包括DATEADD函数,但这看起来并不优雅。

3 个答案:

答案 0 :(得分:9)

如果我正确理解您的问题,在SQL Server中,时间由cast(0 as datetime)

提供
select Max(ISNULL(MyDateCol, cast(0 as datetime)))
from someTable
group by SomeCol

答案 1 :(得分: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

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

如果您要将数字转换为日期,epoch很有用,但如果您将日期存储为日期则无关紧要。

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

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

答案 2 :(得分:0)

如果将时期定义为1970年1月1日:更好:将其存储在变量

DECLARE @epoch DATETIME
SET     @epoch = CONVERT( DATETIME, '01 JAN 1970', 106 )

select
 DATEPART(YEAR,  DATEADD(day, 180, @epoch)) as year,
...