【问题标题】:A way to select a date between two dates in t-SQL一种在 t-SQL 中选择两个日期之间日期的方法
【发布时间】:2012-07-20 07:46:57
【问题描述】:

比如说,我有两个 DATETIME2 列,我需要在两者之间选择日期。示例:1/1/2012 08:00 和 1/1/2012 09:00 应生成 1/1/2012 08:30。

我正在尝试这个:

SELECT CAST((CAST(dtOut AS float(53)) + 
       CAST(dtIn AS float(53))) / 2 AS DATETIME2) FROM t;

但我收到一个错误,即不允许从 DATETIME2 进行显式转换。

知道怎么做吗?

【问题讨论】:

    标签: sql sql-server tsql datetime


    【解决方案1】:

    DateDiff 将找出两个日期之间的差异。

     select Dateadd(n, DATEDIFF(n, dtIn, dtOut)/2, dtIn) FROM t
    

    顺便说一句,如果字段是日期时间,而不是日期时间2,您的方法将起作用。

    【讨论】:

    • 非常感谢!虽然非常快,但 n、秒、分钟的最佳替代方法是什么?
    • n 表示分钟。如果您需要秒精度,请使用 ss - 取决于您的要求 - 请参阅此处了解选项msdn.microsoft.com/en-us/library/ms189794.aspx
    • 谢谢。我想,秒可能会导致算术溢出,所以我应该坚持分钟...
    • 取决于这些日期相隔多远。如果小于 65 年左右,可以使用秒。
    • 问题是我事先并不知道。所以你认为我坚持分钟会更安全,对吧?
    【解决方案2】:

    试试这个。

      select Dateadd(n, DATEDIFF(n, '1/1/2012 08:00', '1/1/2012 09:00')/2, '1/1/2012 08:00');
    

    【讨论】:

      【解决方案3】:
      declare @d1 datetime2, @d2 datetime2
      select @d1='1/1/2012 08:00',@d2='1/1/2012 09:00'
       select dateadd(minute,datediff(minute ,@d1,@d2)/2.0,@d1)
      

      【讨论】:

        【解决方案4】:

        选择 dateadd(SECOND,datediff(SECOND ,dtIn,dtOut)/2.0,dtIn)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-04
          • 1970-01-01
          • 2017-03-07
          • 2015-07-08
          • 1970-01-01
          • 2015-04-01
          相关资源
          最近更新 更多