【问题标题】:How to get the epoch time in SQL Server?如何在 SQL Server 中获取纪元时间?
【发布时间】:2012-04-01 02:52:05
【问题描述】:

场景是这样的: 从某个表中选择最大日期,当目标表没有数据时,最大日期为空。当日期为空时,我想得到系统的最早日期,所以纪元时间看起来很完美。

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

【问题讨论】:

  • 等等...你的意思是一般的时代,还是特别是unix时代?此外,一个不存在的集合的最大值为空对我来说是有意义的。为什么不喜欢 null 结果?
  • @Corbin: en...我想用这个时间作为 where 条件。所以,如果它为空,我需要更改不是我自命不凡的 where 子句。最后,一个纪元时间似乎非常适合这种情况,不需要在 where 子句中进行任何更改。我清理自己了吗?\

标签: sql-server epoch


【解决方案1】:

如果我正确理解您的问题,在 SQL Server 中,纪元由cast(0 as datetime) 给出:

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

【讨论】:

    【解决方案2】:

    可以存储在 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) 之类的东西会产生相同的结果,但它会掩盖您在代码中所做的事情。维护它的人,想知道这些奇怪的旧日期来自哪里,将能够更快地发现硬编码的日期。

    【讨论】:

      【解决方案3】:

      如果您将纪元定义为 1970 年 1 月 1 日:更好:将其存储在变量中

      DECLARE @epoch DATETIME
      SET     @epoch = CONVERT( DATETIME, '01 JAN 1970', 106 )
      
      select
       DATEPART(YEAR,  DATEADD(day, 180, @epoch)) as year,
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2022-12-16
        • 2018-01-17
        • 2014-09-25
        • 2016-06-15
        • 1970-01-01
        • 2013-08-15
        相关资源
        最近更新 更多