Разница во времени Asp.Net и Sql Server в днях, часах, минутах

Я работаю над приложением для отслеживания проблем с asp.net и sql server 2005. Отслеживая проблемы, я сохраняю крайний срок в виде даты и времени в базе данных, а также, если кто-то публикует сообщение на доске объявлений, дата/время публикации также получает хранится в БД как datetime.

Теперь мое требование состоит в том, чтобы показать крайний срок выпуска как «осталось 2 дня», когда осталось всего 2 дня, точно так же, когда крайний срок уже истек, он показывает 2 дня от графика. Это, я думаю, может быть достигнуто с помощью sql server datediff(), но в случае сообщений, которые мне нужно показать, как отправленные 2 часа 3 минуты назад .... или отправленные 3 дня 18 часов назад или что-то подобное ... ( мы можем исключить часы, если они были опубликованы хотя бы за 1 день до этого).

Пробовал Google, но не смог найти ничего полезного. Было бы; оцените вашу любезную помощь, как всегда.

Заранее спасибо.


person Kunal    schedule 09.12.2009    source источник


Ответы (2)


Используйте вариант следующего запроса и внесите необходимые изменения. Для других СУБД замените функции даты соответствующими эквивалентами.

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
person Disillusioned    schedule 09.12.2009
comment
это еще не проверял! но выглядит потрясающе :) большое спасибо за ваши добрые усилия. - person Kunal; 11.12.2009

Вместо того, чтобы делать это в SQL, вы можете использовать .NET TimeSpan struct, чтобы получить эту функциональность.

Вы можете получить его, вычитая одну дату из другой, и это дает вам часы/минуты/секунды детали вам нужно.

person Oded    schedule 09.12.2009