Lorsque vous utilisez SQL Server pour traiter les horodatages, il est essentiel de comprendre ses limites en matière de précision.
Considérez la structure de tableau suivante :
<code class="language-sql">CREATE TABLE [TESTTABLE] ( [ID] [int] IDENTITY(1,1) NOT NULL, [DateField] [datetime] NULL, [StringField] [varchar](50), [IntField] [int] NULL, [BitField] [bit] NULL )</code>
Exécutez le code suivant :
<code class="language-sql">BEGIN INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'}); SELECT SCOPE_IDENTITY() END</code>
Le comportement attendu est de stocker l'horodatage avec une précision totale à la milliseconde. Cependant, lors de l'interrogation de la table à l'aide de l'instruction suivante :
<code class="language-sql">select * from testtable with (NOLOCK)</code>
Vous remarquerez peut-être que la colonne DateField affiche :
<code>2009-04-03 15:41:27.*377*</code>
SQL Server ne stocke qu'environ 1/300 de seconde. Ces valeurs de temps tombent toujours sur 0, 3 et 7 millisecondes. Par exemple :
<code>00:00:00.000<br></br> 00:00:00.003<br></br> 00:00:00.007<br></br> 00:00:00.010<br></br> 00:00:00.013<br></br> ...</code>
Si la précision à la milliseconde est critique, il n'existe pas de solution directe dans les types de données natifs de SQL Server. Vous pouvez envisager les méthodes suivantes :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!