【问题标题】:Asp.Net and Sql Server Time difference in days, hours, minutesAsp.Net 和 Sql Server 时差以天、小时、分钟为单位
【发布时间】:2010-12-24 19:35:55
【问题描述】:

我正在使用 asp.net 和 sql server 2005 开发问题跟踪应用程序。在跟踪问题时,我将截止日期作为日期时间存储在数据库中,并且如果有人在留言板中发布消息,则发布日期/时间也作为日期时间存储在数据库中。

现在我的要求是在仅剩 2 天时将问题截止日期显示为“还剩 2 天”,就像截止日期已经结束时会显示比计划晚 2 天一样。我认为这可以通过 sql server datediff() 来实现,但是如果我需要显示的消息就像 2 小时 3 分钟前发布的那样......或 3 天 18 小时前发布的消息或类似的东西......(如果它是在 1 天前发布的,我们可以消除时间)。

尝试了谷歌,但找不到任何有用的东西。将;一如既往地感谢您的帮助。

提前致谢。

【问题讨论】:

    标签: asp.net sql-server date datediff


    【解决方案1】:

    您可以使用 .NET TimeSpan 结构来获取此功能,而不是在 SQL 中执行此操作。

    您可以通过subtracting 从另一个日期获取它,它会为您提供所需的小时/分钟/秒详细信息。

    【讨论】:

      【解决方案2】:

      对以下查询使用变体,并根据需要进行调整。对于其他 RDBMS,请将日期函数替换为适当的等效项。

      SELECT  CASE
                WHEN DateValue-GETDATE() >= 1 THEN CAST(DATEPART(dy, DateValue-GETDATE()) AS varchar) + ' day(s) remaining'
                WHEN DateValue-GETDATE() >= 0 THEN CAST(DATEPART(hh, DateValue-GETDATE()) AS varchar) + ' hour(s) remaining'
                /*Note, it's convenient to switch around for negatives*/
                WHEN GETDATE()-DateValue <= '00:59' THEN CAST(DATEPART(mi, GETDATE()-DateValue) AS varchar) + ' minutes(s) overdue'
                WHEN GETDATE()-DateValue <= 1 THEN CAST(DATEPART(hh, GETDATE()-DateValue) AS varchar) + ' hours(s) overdue'
              ELSE
                CONVERT(varchar, DateValue-GETDATE(), 121)
              END AS Time_Scale
      

      【讨论】:

      • 尚未对此进行测试!但看起来很棒 :) 非常感谢您的努力。
      猜你喜欢
      • 1970-01-01
      • 2015-01-15
      • 2013-11-04
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      相关资源
      最近更新 更多