0

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

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

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

提前致谢。

4

2 回答 2

3

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

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

于 2009-12-09T12:16:46.167 回答
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
于 2009-12-09T15:09:54.180 回答