Database
 sql >> Base de données >  >> RDS >> Database

Type de données DateHeure T-SQL

Présentation

Les types de données sont des attributs qui spécifient le type de données que les objets tels que les colonnes, les variables locales, les expressions et les paramètres peuvent contenir. Dans le monde du SGBDR, les types de données sont généralement regroupés en types de données chaîne, numérique et date.

T-SQL prend en charge 6 types de données de date et d'heure, à savoir :

  1. Dateheure
  2. Petite date/heure
  3. Date
  4. Heure
  5. DateHeure2
  6. Datetimeoffset

Les deux premiers types de données sont considérés comme des versions héritées des plus récents. Dans cet article, nous nous concentrons sur les types de données de date et, plus précisément, sur le datetime et datetime2 types de données disponibles dans SQL Server. Le tableau 1 donne des détails sur les différents types de données de date et d'heure disponibles dans SQL Server.

[identifiant de table=59 /]

Onglet 1 Types de données de date et d'heure

Dateheure et Dateheure2

Datatime est un type de données qui combine la date et l'heure dans un format d'horloge de 24 heures. La plage de dates prise en charge dans le type de données datetime est celle indiquée dans l'onglet 1 et elle a une précision d'environ 3 millisecondes.

Datetime2 est une extension du type de données datetime. Il accepte une plus large gamme de valeurs possibles et a une précision de 100 nanosecondes, ce qui est bien meilleur que son prédécesseur. Un autre aspect clé du type de données dattime2 est que le stockage requis varie de 6 à 8 octets selon la précision que vous choisissez.

  • Vous pouvez obtenir une précision de 1 milliseconde en autorisant trois décimales sur le composant des secondes. Chaque valeur consommera donc six octets.
  • Vous pouvez obtenir une précision de 100 nanosecondes en autorisant sept décimales sur le composant des secondes. Chaque valeur consommera donc huit octets.

Démonstrations

Insérer des valeurs de date erronées

Nous créons un tableau avec les détails indiqués dans le Listing 1 pour effectuer quelques démonstrations qui illustrent comment manipuler le datetime et datetime2 types de données.

-- Listing 1 Create Table and insert Rows
-- Create Table with Data Types
use Practice2017
go
create table staffers (
fname varchar(50),
lname varchar(50),
JobTitle varchar(100),
DOB datetime,
PreciseDOB datetime2,
LastLoginTime time)
go

Ensuite, nous essayons de remplir le tableau avec une ligne, comme indiqué dans la liste 2, mais nous obtenons l'erreur indiquée dans la figure 1. Le mot clé dans le message d'erreur est les valeurs « hors plage ». Ce qu'il dit, c'est que sa valeur que nous essayons d'insérer est soit inférieure à 01-Jan-1753 ou supérieur à 31-Dec-9999 . Dans ce cas, le problème est que nous n'avons pas utilisé le format de saisie recommandé : AAAAMMJJ hh:mm:ss.nnn » (voir tableau 1). Lecture de la valeur '06101979 ', SQL Server suppose que 0610 est l'année (correspondant à AAAA). Cette erreur n'est pas renvoyée pour le type de données datetime2 car la plage pour datetime2 est plus large à partir de l'année 0001.

-- Listing 2 Insert Rows with Wrong Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06101979'
,'06101979'
,'8:00 AM'
)

Fig. 1 Erreur renvoyée pour la colonne Datetime

Insérer les valeurs de date correctes

Nous essayons de corriger le problème en entrant le format d'entrée correct pour la colonne datetime comme indiqué dans le Listing 3. Lorsque nous exécutons à nouveau l'instruction, nous obtenons l'erreur illustrée à la Fig. 2. Cette erreur est essentiellement causée par le même échec à suivre les spécifications du format d'entrée. Cependant, le problème réside dans l'autre partie de la date '06101979 ‘ qui correspond au format d'entrée ‘AAAAMMJJ hh:mm:ss.nnn '. Dans ce cas, SQL Server a supposé 19 Est un mois et 79 est un jour du mois. La tentative de cette conversion implicite échoue car aucune des assertions précédentes n'est vraie.

-- Listing 3 Insert Rows with One Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01061979'
,'8:00 AM'
)

Fig. 2 Erreur renvoyée pour la colonne Datetime2

Le listing 4 nous permet de démontrer la dernière assertion. La valeur 01101201 s'inscrit dans la plage pour datetime2 et nous sommes en mesure d'insérer la ligne. Cette valeur se traduit par le 1er décembre 0110 comme nous le voyons sur la figure 3.

-- Listing 4: Insert Rows with Correct Date Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01101201'
,'8:00 AM')
-- Listing 5: Insert Rows with All Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'19791006'
,'8:00 AM'
)

Vérification des données

Fig. 3 Interrogation de l'ensemble de données

Lorsque nous interrogeons la table staffers, nous voyons clairement la précision du type de données datetime par rapport à l'alternative datetime2. Passons à quelque chose d'un peu plus sinistre :les paramètres de langue. Jetez un œil à la liste 6. Nous insérons exactement les mêmes enregistrements en utilisant le format de date 06/10/1979 . Ce format n'est PAS indépendant de la langue, donc lorsque nous définissons la langue sur britannique dans la première déclaration, puis à us_english dans le second, nous constatons que nous avons en fait inséré deux dates différentes bien que nos valeurs brutes soient les mêmes. C'est pourquoi il est si important de toujours utiliser le format d'entrée recommandé lorsqu'il s'agit de datetime et datetime2 .

-- Listing 6: Impact of Language Settings

set language british
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)


set language us_english
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)

Fig. 4 Interroger les membres du personnel

Avec le paramètre de langue défini sur britannique , SQL Server interprète les deux premiers chiffres comme le jour mais avec le paramètre de langue en tant que us_english , SQL Server interprète les deux premiers chiffres comme un mois. Une dernière chose que nous devons mentionner ici est que lors de l'insertion de nos enregistrements, nous n'avons pas spécifié le composant d'heure. Ainsi, SQL Server suppose automatiquement qu'il s'agissait de minuit moyen de la date spécifiée.

Conclusion

Dans cet article, nous avons appris à quoi ressemblent les types de données datetime et datetime2, leurs principales différences et comment vous assurer que vous saisissez la date correcte lorsque vous utilisez ces types de données. Au cours de celui-ci, nous avons également examiné deux erreurs qu'un développeur pourrait rencontrer lorsqu'il travaille avec ces types de données.

Références

  • Types de données SQL
  • Ben-Gan, I. (2016) Principes de base de T-SQL. pp74-78. Presse Microsoft.