Langue
Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
SQL Server 2008 a introduit des types de données distincts pour la date et l’heure, et développé des types de données avec une plus grande portée, précision et prise en charge des fuseaux horaires. Utilisez le package NuGet Microsoft.Data.SqlClient pour accéder à ces types de données à partir d’applications clientes. Pour les exemples de cet article, importez Microsoft.Data.SqlClient et System.Data en C# ou Visual Basic. Les types de valeurs SQL courants figurent dans System.Data.SqlTypes.
Les versions de SQL Server antérieures à SQL Server 2008 avaient uniquement deux types de données pour travailler avec des valeurs de date et heure : datetime et smalldatetime. Ces deux types de données contiennent à la fois les valeurs de date et d’heure, ce qui rend difficile l’utilisation de l’une sans l’autre. De plus, seules les dates postérieures à l'introduction du calendrier grégorien en Angleterre en 1753 sont prises en charge par ces types. Une autre limitation est que ces types de données plus anciens ne prennent pas en charge les fuseaux horaires, ce qui rend difficile l’utilisation de données provenant de plusieurs fuseaux horaires.
Pour plus d'informations sur les types de données de date et d’heure dans SQL Server, consultez Types de données et fonctions de date et d’heure.
Types de données de date et d'heure introduits dans SQL Server 2008
Le tableau suivant décrit les nouveaux types de données de date et heure.
| Type de données SQL Server | Descriptif |
|---|---|
date |
Le type de données date est situé dans une plage comprise entre le 1er janvier 01 et le 31 décembre 9999, avec une précision d’un jour. La valeur par défaut est 1er janvier 1900. La taille de stockage est de 3 octets. |
time |
Le type de données time stocke les valeurs d’heure uniquement en fonction d’une horloge au format 24 heures. Le type de données time est compris entre 00:00:00.0000000 et 23:59:59.9999999 avec une précision de 100 nanosecondes. La valeur par défaut est 00:00:00.0000000 (minuit). Le type de données time prend en charge une précision à la fraction de seconde, et la taille de stockage varie entre trois et six octets, en fonction de la précision spécifiée. |
datetime2 |
Le type de données datetime2 associe la plage et la précision des types de données date et time en un seul type.Les valeurs par défaut et les formats de littéral de chaîne sont les mêmes que ceux définis dans les types de données date et time. |
datetimeoffset |
Le type de données datetimeoffset présente toutes les fonctionnalités du type de données datetime2 avec en plus un décalage horaire. Le décalage horaire est représenté sous la forme [+|-] HH:MM. HH est un nombre à deux chiffres, compris entre 00 et 14, qui représente le nombre d’heures dans le décalage de fuseau horaire. MM est un nombre à deux chiffres, compris entre 00 et 59, qui représente le nombre de minutes supplémentaires dans le décalage de fuseau horaire. Les formats d’heure sont pris en charge jusqu’à une précision de 100 nanosecondes. Le signe obligatoire + ou- indique si le décalage de fuseau horaire est ajouté ou soustrait à l’heure UTC (temps universel coordonné, ou heure moyenne de Greenwich) pour obtenir l’heure locale. |
Note
Pour plus d’informations sur l’utilisation du mot clé Type System Version, consultez ConnectionString.
Format et ordre de la date
La façon dont SQL Server analyse les valeurs de date et heure dépend non seulement de la version du système de type et de la version du serveur, mais également des paramètres de format et de langue par défaut du serveur. Une chaîne de date qui fonctionne pour les formats de date d’une langue peut ne pas être reconnaissable si la requête est exécutée par une connexion qui utilise des paramètres de format de date et de langue différents.
L’instruction Transact-SQL SET LANGUAGE définit implicitement le DATEFORMAT qui détermine l’ordre des parties de date. Vous pouvez utiliser l’instruction SET DATEFORMAT Transact-SQL sur une connexion pour lever l’ambiguïté des valeurs de date en ordonnant les éléments de la date dans l’ordre MDY, DMY, YMD, YDM, MYD ou DYM.
Si vous ne spécifiez aucun DATEFORMAT pour la connexion, SQL Server utilise la langue par défaut associée à la connexion. Par exemple, une chaîne de date de « 01/02/03 » serait interprétée comme MDY (le 2 janvier 2003) sur un serveur avec un paramètre de langue d’anglais des États-Unis et comme DMY (1er février 2003) sur un serveur avec un paramètre de langue anglaise britannique. L’année est déterminée à l’aide de la règle de coupure d’année de SQL Server, qui définit la date limite pour l’attribution de la valeur du siècle. Pour plus d’informations, consultez Option de coupure des années à deux chiffres.
Note
Le YDM format de date n’est pas pris en charge lors de la conversion d’un format de chaîne en date, datetime2, time ou datetimeoffset.
Pour plus d’informations sur la manière dont SQL Server interprète les données de date et d’heure, consultez Utilisation des donnée de date et d’heure.
Types de données et paramètres de date/heure
Les énumérations suivantes ont été ajoutées à SqlDbType pour prendre en charge les nouveaux types de données de date et heure.
SqlDbType.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.DateTimeOffset
Pour spécifier le type de données de l’objet SqlParameter , utilisez l’une des valeurs d’énumération précédentes SqlDbType .
Note
Vous ne pouvez pas définir la propriété DbType d’un SqlParameter sur SqlDbType.Date.
Pour spécifier le type de paramètre de manière générique, définissez la DbType propriété sur la valeur d’énumération DbType . Les valeurs suivantes DbType prennent en charge les types de données datetimeoffset et datetime2 :
DbType.DateTime2DbType.DateTimeOffset
Ces nouvelles énumérations complètent les énumérations Date, Time et DateTime qui existaient dans les versions antérieures du .NET Framework.
Le type de fournisseur de données .NET Framework d'un objet paramètre est déduit du type .NET Framework de la valeur de l'objet paramètre, ou du DbType de l'objet paramètre. Aucun nouveau type de données System.Data.SqlTypes n’a été introduit pour prendre en charge les nouveaux types de données de date et heure. Le tableau suivant décrit les mappages entre les types de données de date et heure SQL Server 2008 et les types de données CLR.
| Type de données SQL Server | Type .NET Framework | System.Data.SqlDbType |
System.Data.DbType |
|---|---|---|---|
date |
System.DateTime |
Date |
Date |
time |
System.TimeSpan |
Time |
Time |
datetime2 |
System.DateTime |
DateTime2 |
DateTime2 |
datetimeoffset |
System.DateTimeOffset |
DateTimeOffset |
DateTimeOffset |
datetime |
System.DateTime |
DateTime |
DateTime |
smalldatetime |
System.DateTime |
DateTime |
DateTime |
SqlParameter : Propriétés
Le tableau suivant décrit les propriétés de SqlParameter qui sont pertinentes pour les types de données de date et heure.
| Propriété | Descriptif |
|---|---|
| IsNullable | Obtient ou définit si une valeur peut être nullable. Lorsque vous envoyez une valeur de paramètre null au serveur, vous devez spécifier DBNull plutôt que null (Nothing en Visual Basic). Pour plus d’informations sur les valeurs Null de base de données, consultez Handling Null Values. |
| Precision | Obtient ou définit le nombre maximal de chiffres utilisés pour représenter la valeur. Ce paramètre est ignoré pour les types de données de date et heure. |
| Scale | Obtient ou définit la précision fractionnaire de seconde pour Time, DateTime2et DateTimeOffset. Si vous ne définissez pas explicitement l’échelle, le pilote envoie l’échelle 7. Définir explicitement l’échelle sur 0 demande zéro chiffre de seconde fractionnaire. |
| Size | Ignoré pour les types de données de date et d'heure. |
| Value | Obtient ou définit la valeur du paramètre. |
| SqlValue | Obtient ou définit la valeur du paramètre. |
Note
Les valeurs temporelles inférieures à zéro ou supérieures ou égales à 24 heures provoqueront une ArgumentException.
Création de paramètres
Créez des objets SqlParameter avec le constructeur, ou appelez la méthode Add sur la collection Parameters de la commande. La Add méthode accepte des arguments de constructeur ou un objet de paramètre existant.
Les sections suivantes de cette rubrique fournissent des exemples de spécification des paramètres de date et heure. Pour obtenir d’autres exemples d’utilisation des paramètres, consultez Configuration des paramètres et des types de données des paramètres et Paramètres DataAdapter.
Exemple relatif au paramètre date
Le fragment de code suivant montre comment spécifier un paramètre date.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Date";
parameter.SqlDbType = SqlDbType.Date;
parameter.Value = "2007/12/1";
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Date"
parameter.SqlDbType = SqlDbType.Date
parameter.Value = "2007/12/1"
Exemple relatif au paramètre time
Le fragment de code suivant montre comment spécifier un paramètre time.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@time";
parameter.SqlDbType = SqlDbType.Time;
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Time"
parameter.SqlDbType = SqlDbType.Time
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay
Exemple relatif au paramètre datetime2
Le fragment de code suivant montre comment spécifier un paramètre datetime2 avec les parties date et heure.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Datetime2";
parameter.SqlDbType = SqlDbType.DateTime2;
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Datetime2"
parameter.SqlDbType = SqlDbType.DateTime2
parameter.Value = DateTime.Parse("1666-09-02 1:00:00")
Exemple relatif au paramètre DateTimeOffset
Le fragment de code suivant montre comment spécifier un paramètre DateTimeOffset avec une date, une heure et un décalage de fuseau horaire égal à 0.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DateTimeOffSet";
parameter.SqlDbType = SqlDbType.DateTimeOffset;
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffset
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00")
AddWithValue
Pour fournir des paramètres, vous pouvez également appeler AddWithValue sur la collection Parameters de la commande, comme indiqué dans le fragment de code suivant. Toutefois, AddWithValue ne vous permet pas de spécifier le DbType ou le SqlDbType pour le paramètre.
command.Parameters.AddWithValue(
"@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"));
command.Parameters.AddWithValue( _
"@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"))
Pour cette DateTimeOffset valeur, AddWithValue déduit SqlDbType.DateTimeOffset. Pour cibler un autre type de date ou d'heure SQL Server, définissez explicitement la propriété du SqlDbType paramètre.
Le tableau suivant indique quels SqlDbTypes sont déduits de quels types CLR :
| Type CLR | Déduit SqlDbType |
|---|---|
DateTime |
SqlDbType.DateTime |
TimeSpan |
SqlDbType.Time |
DateTimeOffset |
SqlDbType.DateTimeOffset |
Récupération des données de date et d'heure
Le tableau suivant décrit les méthodes utilisées pour récupérer des valeurs de date et d’heure SQL Server 2008.
| Méthode SqlClient | Descriptif |
|---|---|
| GetDateTime | Récupère la valeur de colonne spécifiée en tant que DateTime. |
| GetDateTimeOffset | Récupère la valeur de colonne spécifiée en tant que DateTimeOffset. |
| GetProviderSpecificFieldType | Renvoie le type qui représente le type sous-jacent spécifique au fournisseur pour le champ. Renvoie les mêmes types que GetFieldType pour les types de date et d’heure. |
| GetProviderSpecificValue | Récupère la valeur de la colonne spécifiée. Renvoie les mêmes types que GetValue pour les nouveaux types de date et d’heure. |
| GetProviderSpecificValues | Récupère les valeurs dans le tableau spécifié. |
| GetSqlString | Récupère la valeur de colonne sous forme de SqlString. La méthode lève InvalidCastException si les données ne peuvent pas être exprimées en tant que SqlString. |
| GetSqlValue | Récupère les données de colonne comme SqlDbType par défaut. Renvoie les mêmes types que GetValue pour les nouveaux types de date et d’heure. |
| GetSqlValues | Récupère les valeurs dans le tableau spécifié. |
| GetString | Récupère la valeur de colonne sous forme de chaîne si la version de système de type a la valeur SQL Server 2005. La méthode lève InvalidCastException si les données ne peuvent pas être exprimées sous forme de chaîne. |
| GetTimeSpan | Récupère la valeur de colonne spécifiée en tant que TimeSpan. |
| GetValue | Récupère la valeur de colonne spécifiée en tant que type CLR sous-jacent. |
| GetValues | Récupère des valeurs de colonne dans un tableau. |
| GetSchemaTable | Retourne les métadonnées du jeu de résultats dans l’objet DataTable . |
Note
Les nouvelles dates et heures SqlDbTypes ne sont pas prises en charge pour le code qui s’exécute en cours d’exécution dans SQL Server. Une exception sera levée si un de ces types est passé au serveur.
Spécification des valeurs de date et d'heure en tant que littéraux
Vous pouvez spécifier des types de données de date et d’heure à l’aide de différents formats de chaîne littérale, que SQL Server évalue ensuite au moment de l’exécution, en les convertissant en structures de date/heure internes. SQL Server reconnaît les données de date et heure placées entre guillemets simples ('). Les exemples ci-dessous illustrent certains formats :
Formats de date alphabétiques, tels que
'October 15, 2006'.Formats de date numériques, tels que
'10/15/2006'.Les formats de chaîne non séparés, par exemple
'20061015', qui serait interprété comme le 15 octobre 2006 si vous utilisiez le format de date standard ISO.
Les valeurs temporelles inférieures à zéro ou supérieures ou égales à 24 heures provoqueront une ArgumentException.
Ressources de documentation SQL Server
Pour plus d’informations sur l’utilisation des valeurs de date et d’heure dans SQL Server, consultez les articles suivants.
| Article | Descriptif |
|---|---|
| Types de données et fonctions de date et d'heure (Transact-SQL) | Fournit une vue d’ensemble de tous les types de données et fonctions de date et d’heure Transact-SQL. |
| Utilisation des données de date et d’heure | Fournit des informations sur les fonctions et types de données de date et d’heure, ainsi que des exemples d’utilisation. |
| Types de données (Transact-SQL) | Décrit les types de données système dans SQL Server. |
Voir aussi
- Mappages de types de données SQL Server
- Configuration des paramètres et des types de données des paramètres
- Types de données SQL Server et ADO.NET
- Vue d'ensemble d’ADO.NET