ASP.NET e SQL Server Diference em dias, horas, minutos
-
18-09-2019 - |
Pergunta
Estou trabalhando em um aplicativo de rastreamento de problemas com o ASP.NET e o SQL Server 2005. Ao rastrear os problemas, estou armazenando o prazo como DateTime no banco de dados e também se alguém postar uma mensagem no quadro de mensagens, a data/hora de postagem também estará ficando armazenado no banco de dados como DateTime.
Agora, meu requisito é mostrar o prazo de edição como "2 dias restantes" quando apenas 2 dias forem deixados, assim quando o prazo já está superado, exibindo 2 dias atrás do cronograma. Acho que isso poderia ser alcançado com o SQL Server datediff (), mas no caso das mensagens que eu preciso mostrar como publicado por 2 horas há 3 minutos ... ou postado por 3 dias há 18 horas ou algo semelhante ... ( Podemos eliminar as horas se foram postadas até 1 dia antes).
Tentei o Google, mas não conseguiu encontrar nada útil. Gostaria; Agradeço sua ajuda como sempre.
Desde já, obrigado.
Solução
Use uma variação na consulta a seguir e ajuste conforme necessário. Para outros RDBMs, substitua as funções da data por equivalentes apropriados.
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
Outras dicas
Em vez de fazer isso no SQL, você pode usar o .NET Intervalo de tempo estrutura para obter essa funcionalidade.
Você pode obtê -lo subtraindo Uma data da outra e fornece os detalhes de horas/minutos/segundos necessários.