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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top