SQLShack
Introduction
Une tâche commune pour les débutants est d’apprendre à faire un SQL convertir date et travailler pour les convertir date à d’autres types de données ou couvrir d’autres types de données à la date.
Ici, dans cet article, nous allons expliquer comment travailler et convertir des dates en différents formats ou vice versa.
Requirements
- SQL Server installé. A partir de SQL Server 2008
Exemple
Le premier exemple sera simple, nous avons une colonne varchar avec une date dans une table, mais nous devons convertir le varchar en date. Nous devons faire un SQL convert date.
Voici le script pour créer la table avec les données :
1
2
3
4
5
6
7
8
9
10
11
12
|
CREATE TABLE .(
NOT NULL,
(100) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
) ON
GO
INSERT . (, ) VALEURS (1, N’02-03-2005′)
INSERT . (, ) VALEURS (2, N’03-05-2006′)
INSERT . (, ) VALUES (3, N’04-05-2011′)
|
Nous voulons convertir la colonne date de nvarchar(100) en date.
Pour le faire, nous allons essayer de modifier le design de la table :
Nous allons essayer de changer le type de données en smalldatetime:
Vous recevrez le message d’erreur suivant:
L’enregistrement des modifications n’est pas autorisé. Les modifications que vous avez apportées nécessitent que les tables suivantes soient abandonnées et recréées. Vous avez soit apporté des modifications à une table qui ne peut pas être recréée, soit activé l’option Prevent saving changes that require the table to be re-created.
Pour résoudre cette erreur, dans SSMS, allez dans le menu Tools > Options:
Dans Options, allez dans Designers >Table and Database Designers et décochez l’option Prevent saving changes that require table re-creation :
Cette option désactivera l’option visant à empêcher la sauvegarde de la recréation de la table. Lorsque vous modifiez le type de données de la colonne, cela nécessite la recréation de la table.
Maintenant, vous pouvez enregistrer la conception et votre table sera convertie en date et la date de conversion SQL est terminée:
Fonctions de conversion
T-SQL contient des fonctions pour convertir les types de données. Nous allons utiliser CAST et CONVERT pour effectuer une conversion de date en SQL.
Commençons d’abord par CAST:
Comment convertir de varchar, nvarchar, char, nchar en date sql en utilisant CAST
L’exemple suivant, montrera comment convertir des caractères en un type de date en utilisant la fonction CAST :
1
2
|
declare @vardate varchar(100)=’03-04-2016′
select CAST(@vardate AS datetime) AS dataconverted ;
|
L’exemple déclare une variable nommée vardate et ensuite cette variable qui est un varchar est convertie en datetime en utilisant la fonction CAST.
Note : Pour plus d’informations sur la fonction CAST, consultez ce lien : CAST et CONVERT (Transact-SQL)
Comment faire une conversion SQL de date de varchar, nvarchar, char, nchar à date en utilisant CONVERT
CONVERT est une fonction qui peut faire la même chose que CAST dans le scénario précédent.
1
2
|
declare @vardate varchar(100)=’03-04-2016′
select CONVERT(datetime, @vardate) as dataconverted
|
Le code T-SQL fait la même chose que le cast, mais il utilise la fonction CONVERT. L’avantage de CONVERT est que vous pouvez facilement changer le format de la date en utilisant l’argument style.
Par exemple, si vous voulez la date au format ISO, vous pouvez utiliser la phrase T-SQL suivante :
1
|
select CONVERT(nvarchar(30),getdate(), 121) as isoformat
|
Comment convertir une date sql en différents formats en T-SQL
L’exemple suivant montre comment convertir le format de la date en différents formats.
Pour le format Japananes:
1
|
select CONVERT(nvarchar(30),getdate(), 111) as Japanformat
|
Pour le format USA :
1
|
select CONVERT(nvarchar(30),getdate(), 110) as USAformat
|
Pour le format ANSI :
1
|
select CONVERT(nvarchar(30),getdate(), 102) as ANSIformat
|
Pour le format britannique :
1
|
select CONVERT(nvarchar(30),getdate(), 103) as Britishformat
|
Pour le format allemand :
1
|
select CONVERT(nvarchar(30),getdate(), 104) as Germanformat
|
Pour le format italien :
1
|
select CONVERT(nvarchar(30),getdate(), 105) as Italianformat
|
Pour le format européen par défaut :
1
|
select CONVERT(nvarchar(30),getdate(), 113) as EuropeDefaultformat
|
Pour ODBC Canonical :
1
|
select CONVERT(nvarchar(30),getdate(), 120) as ODBCCanonicalformat
|
Vous avez toujours la possibilité d’utiliser la fonction FORMAT pour obtenir la date dans le format que vous souhaitez :
1
|
SELECT FORMAT( getdate(), ‘dd/MM/yy’)
|
FORMAT est plus facile à gérer les dates et à utiliser le format de votre préférence, car vous n’avez pas besoin de connaître le style. Cependant, dans mon expérience, je vois beaucoup de code utilisant les fonctions CAST et CONVERT donc, il est préférable de les connaître.
Note : Pour plus d’informations sur la fonction FORMAT, consultez ce lien : FORMAT (Transact-SQL)
Problèmes liés aux opérations de conversion de date SQL
Lorsque vous essayez de convertir en date, ce n’est pas toujours possible. L’exemple suivant montre une erreur courante :
1
2
|
declare @vardate varchar(100)=’11242016′
select CONVERT(datetime, @vardate) as dataconverted
|
Le message d’erreur est le suivant :
Msg 242, niveau 16, état 3, ligne 22
La conversion d’un type de données varchar en un type de données datetime a donné lieu à une valeur hors plage.
Il faut des séparateurs pour la date comme un « / », un « . » ou un « -« .
L’exemple suivant, modifie la chaîne de 11242016 à 11-24-2016 et ensuite convertit en date sql :
1
2
3
4
5
|
declare @vardate varchar(100)=’11242016′
set @vardate= SUBSTRING(@vardate, 1, 2)+’-‘+ SUBSTRING(@vardate, 3, 2)+’-‘+SUBSTRING(@vardate, 5, 4)
select CONVERT(date, @vardate) as dataconverted
|
Nous utilisons substring pour concaténer le « – » afin d’utiliser un format de date acceptable et ensuite nous utilisons la fonction CONVERT pour convertir les caractères en date sql.
Types de données de date
Dans SQL Server, il existe plusieurs types de données de date :
- L’heure renvoie les heures, les minutes, les secondes et les nanosecondes (hh:mm:ss.nnnnnn)
- La date renvoie l’année, les mois et les jours (aaaa-mm-jj)
- La date renvoie les données avec ce format : AAAA-MM-JJ hh:mm:ss
- Smalldatetime renvoie la date avec ce format : YYYY-MM-DD hh:mm:ss
- Datetime2 est similaire à Datetime, mais il a plus de précision (YYYY-MM-DD hh:mm :ss)
- Datetimeoffset il a la précision de datetime2, mais il est utilisé pour les fuseaux horaires en UTC
SQL convertir la date en entier
Si vous utilisez le CONVERT ou CAST pour convertir une datetime en entier, il retournera le nombre de jours depuis 1900 jusqu’à la date fournie.
Par exemple, le code T-SQL suivant affichera le nombre de jours depuis 1900 jusqu’à aujourd’hui:
1
|
SELECT CONVERT(INT, GETDATE())
|
Vous pouvez également convertir en entier l’année, les mois, les jours, etc. d’une valeur de date. Le code suivant montre comment stocker dans des variables entières le jour, le mois et l’année d’une valeur de datetime:
1
2
3
4
5
|
declare @year int = year(getdate())
declare @month int = month(getdate())
declare @day int = day(getdate())
select @year as year,@month as month,@day as day
|
Questions courantes sur SQL convert date in SQL Server
Note : Le lien suivant contient une FAQ sur les fonctions et les dates dans SQL Server : FAQ sur les dates dans SQL Server
Conclusions
Dans cet article, nous avons appris à faire une conversion SQL de date dans SQL Server. Nous avons appris comment modifier le type de données dans une table, comment utiliser les fonctions CAST, CONVERT et FORMAT. Nous avons également appris à connaître les différents types de données SQL.
- Auteur
- Postages récents
Il a travaillé pour le gouvernement, des compagnies pétrolières, des sites web, des magazines et des universités dans le monde entier. Daniel intervient aussi régulièrement lors de conférences et de blogs sur SQL Servers. Il rédige des supports de formation SQL Server pour les examens de certification.
Il aide également à la traduction des articles SQLShack en espagnol
Voir tous les messages de Daniel Calbimonte
- Questions d’entretien SQL – 3 septembre, 2020
- Certifications SQL – 7 août 2020
- Historique de TSQL – 3 septembre 2019
.