Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Differenza di date
giovedì 10 agosto 2006 - 17.01
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
gio 10 ago 2006 - 17:01
salve,
ho due date in un db sql server vorrei che all'inserimento della seconda, in un altro campo mi venisse inserita la differenza delle due date.
idee?
saluti
ENzo
micto27
Profilo
| Senior Member
385
messaggi | Data Invio:
gio 10 ago 2006 - 17:11
>salve,
>
>ho due date in un db sql server vorrei che all'inserimento della
>seconda, in un altro campo mi venisse inserita la differenza
>delle due date.
>
>idee?
>
>saluti
SQL Server ha la funzione "DATEDIFF ( datepart , startdate , enddate )"
Se tale differenza deve essere fisicamente registrata sul database potresti definire un trigger
da attivare a fronte di INSERT e UPDATE con il quale valorizzare la colonna target
con il risultato della funzione DATEDIFF.
Diversamente, senza registrare la differenza, potresti calcolarla direttamente nell'ambito dello statement sql dove ti serve:
select Data1, Data2, DATEDIFF( ?? , Data1 , Data2 ) as Differenza,..... from .....
Ciao, Michele
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
ven 11 ago 2006 - 08:45
si ho visto datediff ma ho riscontrato un problema o almeno credo, poiche questa funzione mi fa la differenza solo per un parametro che sia minuti, ore, secondi ecc.
esempio:
Data_In Data_Out
2006-07-25 14:49:57.623 2006-07-25 15:59:57.343
2006-07-25 15:59:58.323 2006-07-25 16:03:57.343
select DATEDIFF(MINUTE, Data_In, Data_Out) from miatabella
Risultato
70
4
e se io lo volessi nella forma : 01:10, 00:04 ??
come potrei fare?? un CAST??
micto27
Profilo
| Senior Member
385
messaggi | Data Invio:
ven 11 ago 2006 - 09:06
>si ho visto datediff ma ho riscontrato un problema o almeno credo,
>poiche questa funzione mi fa la differenza solo per un parametro
>che sia minuti, ore, secondi ecc.
>
>esempio:
>
>Data_In Data_Out
>
>2006-07-25 14:49:57.623 2006-07-25 15:59:57.343
>2006-07-25 15:59:58.323 2006-07-25 16:03:57.343
>
>
>
>select DATEDIFF(MINUTE, Data_In, Data_Out) from miatabella
>
>
>Risultato
>
>70
>4
>e se io lo volessi nella forma : 01:10, 00:04 ??
>
>come potrei fare?? un CAST??
>
Ciao,
se l'intervallo da misurare fosse inferiore alle 24 ore un'idea può essere questa,
ti passo uno script T-SQL, prova a verificarlo, tanto per valutare l'idea:
declare @oggi datetime
set @oggi = convert(datetime, convert(varchar, getdate(), 103), 103)
declare @d1 datetime
declare @d2 datetime
set @d1 = convert(datetime, '2006-08-11 10:21:33', 120)
set @d2 = convert(datetime, '2006-08-11 10:24:51', 120)
select convert(varchar, dateadd(ss, datediff(ss, @d1, @d2), @oggi), 108)
L'idea è questa:
uso datediff per ottenere una differenza in secondi
sommo tale numero di secondi a un datatime che abbia la parte TIME = 00:00:00 in modo da ottenere un campo datetime
formattando il datetime ottenuto per la parte HH:mm:ss ottengo quello che ti serviva
Ciao, Michele
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
ven 11 ago 2006 - 09:08
LO vedo e ti faccio sapere grazie
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
ven 11 ago 2006 - 09:22
FUNZIONA benissimo, il problema ora e' che devo inserire di default il valore 00:00:00.000, in ogni record del TRANSIT_Time, ed inoltre, devo creare un TRIGGER che al momento che mi viene fatto l"UPDATE di uno specifico record mi riempe il campo
TRANSIT_Time facendo la differenza dei due tempi??
tu che ne pensi??
ps. ma anche tu niente vacanze?
micto27
Profilo
| Senior Member
385
messaggi | Data Invio:
ven 11 ago 2006 - 09:32
>FUNZIONA benissimo, il problema ora e' che devo inserire di default
>il valore 00:00:00.000, in ogni record del TRANSIT_Time, ed inoltre,
>devo creare un TRIGGER che al momento che mi viene fatto l"UPDATE
>di uno specifico record mi riempe il campo
>TRANSIT_Time facendo la differenza dei due tempi??
>
>tu che ne pensi??
>
>
>ps. ma anche tu niente vacanze?
Ma non è che della colonna TRANSIT_Time puoi fare a meno?
Potresti definirti una User Defined Function che quello che abbiamo visto nello script e che utilizzi negli statement
SQL:
select col1, col2, data1, data2, fnTransitTime(Data1, Data2) ......
Michele
bluland
Profilo
| Guru
1.149
messaggi | Data Invio:
ven 11 ago 2006 - 09:48
No perche' cmq il tempo di transit deve essere memorizzato!!
cmq ho appena scoperto che sono neccessari anche i giorni, cmq ho risolto mettendo giorni e ore in due colonne diverse cosi:
SELECT
DATEDIFF(DAY,'2006-07-24 15:59:58.323','2006-07-26 16:03:57.343')
AS Transit_Days,
CONVERT(VARCHAR,DATEADD(MINUTE,DATEDIFF(MINUTE,'2006-07-24 16:59:58.323','2006-07-26 17:05:57.343'),''),108)
AS Transit_hour
al limite prevedero' una query di UPDATE dove per i due campi inseriro' le espressioni sopra!
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !