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

  1. 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
Daniel Calbimonte est un Microsoft Most Valuable Professional, un formateur certifié Microsoft et un professionnel informatique certifié Microsoft pour SQL Server. Il est un auteur SSIS accompli, enseignant dans des académies informatiques et a plus de 13 ans d’expérience de travail avec différentes bases de données.
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

Derniers messages de Daniel Calbimonte (voir tous)
  • Questions d’entretien SQL – 3 septembre, 2020
  • Certifications SQL – 7 août 2020
  • Historique de TSQL – 3 septembre 2019

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.