Asp.Net e SQL Server Time differenza di giorni, ore, minuti
-
18-09-2019 - |
Domanda
Sto lavorando su un tema di monitoraggio applicazione con asp.net e SQL Server 2005. Durante l'inseguimento i problemi che sto la memorizzazione del termine come datetime nel database e anche se qualcuno invia un messaggio nella bacheca la data di registrazione / ora è anche sempre memorizzato nel db come datetime.
Ora la mia esigenza è quella di mostrare il termine ultimo problema come "2 giorni a sinistra", quando solo 2 giorni sono a sinistra, proprio così, quando la scadenza è già su di esso di visualizzazione Sud 2 giorni in ritardo. Questo penso che potrebbe essere raggiunto con datediff sql server (), ma in caso di messaggi che ho bisogno di mostrare come pubblicato da 2 ore 3 minuti fa .... o postato da 3 giorni 18 ore fa, o qualcosa di simile ... ( siamo in grado di eliminare le ore se è stato pubblicato ancora 1 giorno prima).
Ho provato Google, ma non riusciva a trovare nulla di utile. Voluto; apprezzo il vostro aiuto gentile come sempre.
Grazie in anticipo.
Soluzione
Con una variazione sul seguente query, e regolare come necessario. Per gli altri RDBMS di sostituire le funzioni di data con equivalenti appropriate.
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
Altri suggerimenti
Invece di fare questo in SQL, è possibile utilizzare il .NET TimeSpan struct per ottenere questa funzionalità.
È possibile ottenere da sottraendo una data da un altro, e ti dà le ore / minuti / secondi dettagli è necessario.