70 votes

Pourquoi est-SQL Server perdre un millième de seconde?

J'ai un tableau structuré comme ceci:

CREATE TABLE [TESTTABLE](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DateField] [datetime] NULL,
    [StringField] [varchar](50),
    [IntField] [int] NULL,
    [BitField] [bit] NULL
)

J'exécute le code suivant:

BEGIN 
   INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) 
   VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});  

   SELECT SCOPE_IDENTITY()  
END

Et puis

select * from testtable with (NOLOCK)

et mon résultat montre que:

2009-04-03 15:41:27.377

pour la colonne date.

Des idées pourquoi j'ai l'impression de perdre un millième de seconde??

TIA

97voto

Whatsit Points 3292

SQL Server stocke seulement à environ 1/300ème de seconde. Ces toujours tomber sur le 0, 3 et 7 millisecondes. E. g. compter à partir de 0 dans le plus petit incrément:

00:00:00.000
00:00:00.003
00:00:00.007
00:00:00.010
00:00:00.013
...

Si vous avez besoin qu'une précision à la milliseconde, il n'y a pas de façon agréable autour d'elle. La meilleure des options que j'ai vu sont à stocker la valeur de nombre personnalisé de champs et de le reconstruire à chaque fois que vous aller chercher la valeur, ou de les stocker sous forme de chaîne d'un format connu. Ensuite, vous pouvez (en option) magasin une "approximatif" la date de la native de type date pour des raisons de rapidité, mais il introduit une complexité conceptuelle qui, souvent, n'est pas voulu.

42voto

Rob Garrison Points 2977

SQL Server 2008 est beaucoup plus précis. Le datetime2 type avec précision stocker des valeurs comme ceci: 2008-12-19 09:31:38.5670514 (précision à 100 nanosecondes).

Référence: temps et datetime2 - a la découverte de SQL Server 2008 de la Nouvelle Date/Heure de Types de Données

27voto

Peter M Points 4354

Le MS-SQL datetime type n'a qu'une 1/300 ms (~3.33 ms) de la résolution, de sorte que vous êtes probablement voir une erreur d'arrondi.

Consultez le MSDN Datetime de SQL de référence

6voto

Tom H. Points 23783

SQL Server n'est précis à 1/300ème de seconde. Il va arrondir les valeurs au plus proche multiple de 1/300e.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X