Asp.Net和Sql Server时间差,天,小时,分钟

时间:2009-12-09 12:12:43

标签: asp.net sql-server date datediff

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

您可以在subtracting之前从另一个日期获取它,它会为您提供所需的小时/分钟/秒详情。

答案 1 :(得分:0)

对以下查询使用变体,并根据需要进行调整。对于其他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