time (Transact-SQL)
Définit une heure d'un jour. L'heure ne prend pas en charge les fuseaux horaires et se présente au format 24 heures.
Description de time
Propriété |
Valeur |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Syntaxe |
time [ (fractional second precision) ] |
||||||||||||||||||||||||||||||||||||||||
Utilisation |
DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) |
||||||||||||||||||||||||||||||||||||||||
fractional seconds precision |
Spécifie le nombre de chiffres pour la partie fractionnaire des secondes. Il peut s'agir d'un entier compris entre 0 et 7. La précision fractionnaire par défaut est 7 (100 ns). |
||||||||||||||||||||||||||||||||||||||||
Format de littéral de chaîne par défaut (utilisé pour le client de bas niveau) |
hh:mm:ss[. nnnnnnn] Pour plus d'informations, consultez la section « Compatibilité descendante pour les clients de bas niveau » qui suit. |
||||||||||||||||||||||||||||||||||||||||
Plage |
00:00:00.0000000 à 23:59:59.9999999 |
||||||||||||||||||||||||||||||||||||||||
Plages d'éléments |
hh comprend deux chiffres, entre 0 et 23, qui représentent l'heure. mm comprend deux chiffres, entre 0 et 59, qui représentent la minute. ss comprend deux chiffres, entre 0 et 59, qui représentent la seconde. n* comprend entre zéro et sept chiffres, entre 0 et 9999999, qui représentent les fractions de seconde. |
||||||||||||||||||||||||||||||||||||||||
Longueur de caractère |
8 positions au minimum (hh:mm:ss) à 16 au maximum (hh:mm:ss. nnnnnnn) |
||||||||||||||||||||||||||||||||||||||||
Précision, échelle (l'utilisateur spécifie l'échelle uniquement) |
|
||||||||||||||||||||||||||||||||||||||||
Taille de stockage |
5 octets, fixes, sont la valeur par défaut avec une précision à la fraction de seconde de 100 ns par défaut. |
||||||||||||||||||||||||||||||||||||||||
Précision |
100 nanosecondes |
||||||||||||||||||||||||||||||||||||||||
Valeur par défaut |
00:00:00 Cette valeur est utilisée pour la partie heure ajoutée pour la conversion implicite de date en datetime2 ou datetimeoffset. |
||||||||||||||||||||||||||||||||||||||||
Précision à la fraction de seconde définie par l'utilisateur |
Oui |
||||||||||||||||||||||||||||||||||||||||
Prise en charge et conservation du décalage de fuseau horaire |
Non |
||||||||||||||||||||||||||||||||||||||||
Prise en charge de l'heure d'été |
Non |
Formats de littéraux de chaîne pris en charge pour l'heure
Le tableau suivant affiche les formats de littéraux de chaîne valides pour le type de données time.
SQL Server |
Description |
---|---|
hh:mm[:ss][:fractions de seconde][AM][PM] hh:mm[:ss][.fractions de seconde][AM][PM] hhAM[PM] hh AM[PM] |
La valeur d'heure 0 représente l'heure après minuit (AM), que l'élément AM soit ou non spécifié. PM ne peut pas être spécifié quand l'heure est égale à 0. Les valeurs d'heure comprises entre 01 et 11 représentent les heures avant midi si ni AM ni PM n'est spécifié. Elles représentent les heures avant midi si AM est spécifié et les heures après midi si PM est spécifié. La valeur 12 pour les heures représente l'heure qui démarre à midi si ni AM ni PM n'est spécifié. Elle représente l'heure qui démarre à minuit si AM est spécifié et l'heure qui démarre à midi si PM est spécifié. Par exemple, 12:01 correspond à 1 minute après midi, comme 12:01 PM, alors que 12:01 AM équivaut à 1 minute après minuit. La spécification de 12:01 AM équivaut à 00:01 ou 00:01 AM. Les heures situées entre 13 et 23 représentent les heures après midi si ni AM ni PM n'est spécifié. Elles représentent également les heures après midi si PM est spécifié. Vous ne pouvez pas spécifier AM lorsque la valeur d'heure est comprise entre 13 et 23. Une valeur d'heure de 24 n'est pas valide. Pour représenter minuit, utilisez 12:00 AM ou 00:00. Les millisecondes peuvent être précédées du signe deux-points (:) ou d'un point (.). Si le signe deux-points est utilisé, il s'agit de millièmes de secondes. Précédé d'un point, un chiffre unique représente un dixième de seconde, deux chiffres un centième et trois chiffres un millième. Par exemple, 12:30:20:1 indique 20 secondes et un millième après 12:30 ; 12:30:20.1 indique 20 secondes et un dixième après 12:30. |
ISO 8601 |
Remarques |
---|---|
hh:mm:ss hh:mm[:ss][.fractions de seconde] |
|
ODBC |
Remarques |
---|---|
{t 'hh:mm:ss[.fractions de seconde]'} |
Spécifique à l'API ODBC. Fonctionne dans SQL Server 2012 comme dans SQL Server 2005. |
Conformité avec les normes ANSI et ISO 8601
L'utilisation de l'heure 24 pour représenter minuit et du saut de seconde au-delà de 59 comme défini par ISO 8601 (5.3.2 et 5.3) n'est pas prise en charge comme étant à compatibilité descendante et cohérente avec les types de date et d'heure existants.
Le format de littéral de chaîne par défaut (utilisé pour le client de bas niveau) s'alignera avec le format standard SQL qui est défini comme hh:mm:ss[. nnnnnnn]. Ce format ressemble à la définition ISO 8601 pour TIME à l'exclusion des fractions de seconde.
Compatibilité descendante pour les clients de bas niveau
Certains clients de bas niveau ne prennent pas en charge les types de données time, date, datetime2 et datetimeoffset. Le tableau suivant présente le type de mappage entre une instance de haut niveau de SQL Server et des clients de bas niveau.
Type de données SQL Server 2012 |
Format de littéral de chaîne par défaut passé au client de bas niveau |
ODBC de bas niveau |
OLEDB de bas niveau |
JDBC de bas niveau |
SQLCLIENT de bas niveau |
---|---|---|---|---|---|
time |
hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
date |
AAAA-MM-JJ |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
datetime2 |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
datetimeoffset |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
Conversion de données de date et d'heure
Lorsque vous effectuez une conversion vers des types de données date et heure, SQL Server rejette toutes les valeurs qu'il ne peut identifier comme dates ou heures. Pour plus d'informations sur l'utilisation des fonctions CAST et CONVERT avec des données de date et d'heure, consultez CAST et CONVERT (Transact-SQL).
Conversion de types de données time(n) vers d'autres types de date et d'heure
Le tableau suivant décrit ce qui se produit lorsqu'un type de données time est converti en d'autres types de données de date et d'heure.
Type de données vers lequel effectuer la conversion |
Détails de conversion |
---|---|
time(n) |
Les heures, les minutes et les secondes sont copiées. Lorsque la précision de destination est inférieure à la précision source, les fractions de seconde sont arrondies à la valeur supérieure en fonction de la précision de destination. L'exemple suivant montre les résultats de la conversion d'une valeur time(4) en valeur time(3).
|
date |
La conversion échoue et le message d'erreur 206 est généré : « Conflit de types d'opérandes : date est incompatible avec time ». |
datetime |
Les valeurs d'heures, de minutes et de secondes sont copiées et le composant date est défini sur « 1900-01-01 » Lorsque la précision de fraction de seconde de la valeur time(n) est supérieure à trois chiffres, le résultat datetime est tronqué. Le code suivant montre les résultats de la conversion d'une valeur time(4) en valeur datetime.
|
smalldatetime |
La date est définie sur '1900-01-01' et les valeurs d'heures et de minutes sont arrondies à la valeur supérieure. Les secondes et fractions de seconde sont définies sur 0. Le code suivant montre les résultats de la conversion d'une valeur time(4) en valeur smalldatetime.
|
datetimeoffset(n) |
La date est défini sur '1900-01-01' et l'heure est copiée. Le décalage de fuseau horaire est défini sur +00:00. Lorsque la précision de fraction de seconde de la valeur time(n) est supérieure à la précision de la valeur datetimeoffset(n), la valeur est arrondie en conséquence à la valeur supérieure. L'exemple suivant montre les résultats de la conversion d'une valeur time(4) en type datetimeoffset(3).
|
datetime2(n) |
La date est définie sur '1900-01-01', le composant heure est copié et le décalage de fuseau horaire est défini sur 00:00. Lorsque la précision de fraction de seconde de la valeur datetime2(n) est supérieure à la valeur time(n), la valeur est arrondie en conséquence à la valeur supérieure. L'exemple suivant montre les résultats de la conversion d'une valeur time(4) en valeur datetime2(2).
|
Conversion de littéraux de chaîne en time(n)
Les conversions de littéraux de chaîne en types de date et d'heure sont autorisées si toutes les parties des chaînes sont dans des formats valides. Sinon, une erreur d'exécution est déclenchée. Les conversions implicites ou explicites qui ne spécifient pas de style à partir de types de date et d'heure en littéraux de chaîne seront au format par défaut de la session active. Le tableau suivant montre les règles de conversion d'un littéral de chaîne en type de données time.
Littéral de chaîne d'entrée |
Règle de conversion |
---|---|
ODBC DATE |
Les littéraux de chaîne ODBC sont mappés sur le type de données datetime. Toute opération d'affectation de littéraux ODBC DATETIME en des types time provoque une conversion implicite entre datetime et ce type, comme défini par les règles de conversion. |
ODBC TIME |
Voir la règle DATE ODBC plus haut. |
ODBC DATETIME |
Voir la règle DATE ODBC plus haut. |
DATE uniquement |
Les valeurs par défaut sont fournies. |
TIME uniquement |
Simple |
TIMEZONE uniquement |
Les valeurs par défaut sont fournies. |
DATE + TIME |
La partie TIME de la chaîne d'entrée est utilisée. |
DATE + TIMEZONE |
Non autorisé. |
TIME + TIMEZONE |
La partie TIME de la chaîne d'entrée est utilisée. |
DATE + TIME + TIMEZONE |
La partie TIME du DATETIME local sera utilisée. |
Exemples
A.Comparaison de types de données de date et d'heure
L'exemple suivant compare les résultats de la conversion d'une chaîne en chaque type de données date et time.
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS
'datetimeoffset';
Type de données |
Sortie |
---|---|
time |
12:35:29. 1234567 |
date |
2007-05-08 |
smalldatetime |
2007-05-08 12:35:00 |
datetime |
2007-05-08 12:35:29.123 |
datetime2 |
2007-05-08 12:35:29. 1234567 |
datetimeoffset |
2007-05-08 12:35:29.1234567 +12:15 |
B.Insertion de littéraux de chaîne d'heure valides dans une colonne time(7)
Le tableau suivant répertorie différents littéraux de chaîne qui peuvent être insérés dans une colonne de type de données time(7) avec les valeurs qui sont ensuite stockées dans cette colonne.
Type de format du littéral de chaîne |
Littéral de chaîne inséré |
Valeur time(7) qui est stockée |
Description |
---|---|---|---|
SQL Server |
'01:01:01:123AM' |
01:01:01.1230000 |
Lorsqu'un signe deux-points (:) précède la précision en fractions de seconde, l'échelle ne peut pas dépasser trois positions ou une erreur sera déclenchée. |
SQL Server |
'01:01:01.1234567 AM' |
01:01:01.1234567 |
Lorsque l'élément AM ou PM est spécifié, l'heure est stockée au format 24 heures sans le littéral AM ou PM |
SQL Server |
'01:01:01.1234567 PM' |
13:01:01.1234567 |
Lorsque l'élément AM ou PM est spécifié, l'heure est stockée au format 24 heures sans le littéral AM ou PM |
SQL Server |
'01:01:01.1234567PM' |
13:01:01.1234567 |
Un espace avant AM ou PM est facultatif. |
SQL Server |
'01AM' |
01:00:00.0000000 |
Lorsque seule l'heure est spécifiée, toutes les autres valeurs sont égales à 0. |
SQL Server |
'01 AM' |
01:00:00.0000000 |
Un espace avant AM ou PM est facultatif. |
SQL Server |
'01:01:01' |
01:01:01.0000000 |
Lorsque la précision en fractions de seconde n'est pas spécifiée, chaque position qui est définie par le type de données est égale à 0. |
ISO 8601 |
'01:01:01.1234567' |
01:01:01.1234567 |
Pour la conformité avec ISO 8601, utilisez le format 24 heures, et non AM ou PM. |
ISO 8601 |
'01:01:01.1234567 +01:01' |
01:01:01.1234567 |
La différence de fuseau horaire facultative (TZD) est autorisée dans l'entrée, mais n'est pas stockée. |
C.Insertion du littéral de chaîne d'heure dans les colonnes de chaque type de données de date et d'heure
Dans le tableau suivant, la première colonne affiche un littéral de chaîne d'heure à insérer dans une colonne de table de base de données du type de données de date et d'heure indiqué dans la deuxième colonne. La troisième colonne affiche la valeur qui sera stockée dans la colonne de table de base de données.
Littéral de chaîne inséré |
Type de données de la colonne |
Valeur qui est stockée dans la colonne |
Description |
---|---|---|---|
'12:12:12.1234567' |
time(7) |
12:12:12.1234567 |
Si la précision en fractions de seconde dépasse la valeur spécifiée pour la colonne, la chaîne sera tronquée sans erreur. |
'2007-05-07' |
date |
NULL |
Toute valeur d'heure provoquera l'échec de l'instruction INSERT. |
'12:12:12' |
smalldatetime |
1900-01-01 12:12:00 |
Toute valeur de précision en fractions de seconde provoquera l'échec de l'instruction INSERT. |
'12:12:12.123' |
datetime |
1900-01-01 12:12:12.123 |
Toute précision de seconde supérieure à trois positions provoquera l'échec de l'instruction INSERT. |
'12:12:12.1234567' |
datetime2(7) |
1900-01-01 12:12:12.1234567 |
Si la précision en fractions de seconde dépasse la valeur spécifiée pour la colonne, la chaîne sera tronquée sans erreur. |
'12:12:12.1234567' |
datetimeoffset(7) |
1900-01-01 12:12:12.1234567 +00:00 |
Si la précision en fractions de seconde dépasse la valeur spécifiée pour la colonne, la chaîne sera tronquée sans erreur. |