Problema con DateAdd ed i millisecondi

venerdì 15 luglio 2011 - 19.20

dompa72 Profilo | Senior Member

Ho due campi uno con la data e l'altro con l'indicazione dei millisecondi, con la funzione DateAdd vorrei sapere perché non mi restituisce il risultato correttamente ma viene approssimato in un modo che non capisco. Purtroppo non posso cambiare il formato da datetime in datetime2.
Il database è Sql Server 2005 (quindi non esiste il DateTime2)
Esiste un modo per risolvere???

un esempio

USE tempdb;

CREATE TABLE dbo.foo(
DataRiga datetime NOT NULL,
Millisecondi smallint not null
);

INSERT dbo.foo
VALUES ('20110620 00:00:01', 1)
, ('20110620 00:00:01', 2)
, ('20110620 00:00:01', 3)
, ('20110620 00:00:01', 4);

select * from dbo.foo;

SELECT DATEADD(millisecond, millisecondi, datariga) as DataCompleta
from dbo.foo;

/* Output:
DataRiga Millisecondi
----------------------- ------------
2011-06-20 00:00:01.000 1
2011-06-20 00:00:25.000 2
2011-06-20 00:00:55.000 3
2011-06-20 00:01:16.000 4


DataCompleta
-----------------------
2011-06-20 00:00:01.000
2011-06-20 00:00:25.003
2011-06-20 00:00:55.003
2011-06-20 00:01:16.003

*/

DROP TABLE dbo.foo;

lbenaglia Profilo | Guru

>Esiste un modo per risolvere???
No, dato che l'accuratezza del data type datetime è pari a 3,33ms quindi i risultati saranno arrotondati ad incrementi di .000, .003, o .007 secondi.
Come sempre trovi tutto sui Books Online:
http://technet.microsoft.com/en-us/library/ms187819.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

dompa72 Profilo | Senior Member

>>Esiste un modo per risolvere???
>No, dato che l'accuratezza del data type datetime è pari a 3,33ms
>quindi i risultati saranno arrotondati ad incrementi di .000,
>.003, o .007 secondi.
>Come sempre trovi tutto sui Books Online:
>http://technet.microsoft.com/en-us/library/ms187819.aspx
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/

ho trovato anche questo documento http://stackoverflow.com/questions/1334143/sql-server-datetime2-vs-datetime
ma per avere una precisione al millesimo con sqlserver 2005 che devo fare???
Per ora ho aggiornato la macchina al 2008 sperando di non avere problemi con lo SCADA.

Grazie della risposta

lbenaglia Profilo | Guru

>ma per avere una precisione al millesimo con sqlserver 2005 che
>devo fare???
SQL Server 2005 non offre alcun data type di tipo data e ora con tale precisione.

>Per ora ho aggiornato la macchina al 2008 sperando di non avere
>problemi con lo SCADA.
Cos'è lo "SCADA"?

>Grazie della risposta
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

dompa72 Profilo | Senior Member

>>ma per avere una precisione al millesimo con sqlserver 2005 che
>>devo fare???
>SQL Server 2005 non offre alcun data type di tipo data e ora
>con tale precisione.
>
>>Per ora ho aggiornato la macchina al 2008 sperando di non avere
>>problemi con lo SCADA.
>Cos'è lo "SCADA"?
lo SCADA è un sistema di supervisione per macchine di officina, oltre alla supervisione consento anche di interfacciare l'uomo alla macchina (HMI Human Machine Interface).
su questo sono abbastanza "ferrato"
http://it.wikipedia.org/wiki/SCADA
http://www.ing.unisi.it/biblio/ebook/sistemi_scada.pdf

uno dei più utilizzati è www.wonderware.it/
oppure quello della rockwell automation (http://www.rockwellautomation.com/it/rockwellsoftware/factorytalk/)
oppure quello Siemens (http://www.automation.siemens.com/mcms/human-machine-interface/en/visualization-software/scada/Pages/Default.aspx)

Grazie ancora
>
>>Grazie della risposta
>Prego.
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5