Dans SQL Server, vous pouvez utiliser le CONVERT()
fonction pour convertir une valeur de date d'un type de données de date à un autre (ou entre tout autre type de données d'ailleurs). Cependant, ce n'est pas la seule fonction de la boîte à outils T-SQL pour la conversion entre les types de données.
Le CAST()
La fonction fait partie de la norme ANSI SQL, et elle fait la plupart des choses CONVERT()
Est-ce que. Ainsi, dans de nombreux cas, vous avez la possibilité de choisir laquelle de ces fonctions vous préférez utiliser.
De nombreux professionnels des bases de données préfèrent CAST()
en raison du fait qu'il fait partie de la norme ANSI SQL, cependant, d'autres préfèrent CONVERT()
en raison des fonctionnalités supplémentaires offertes par l'implémentation de T-SQL (comme la possibilité de fournir un style de date).
Dans tous les cas, cet article fournit des exemples de conversion entre différents formats de date à l'aide de CAST()
.
Syntaxe
La syntaxe ressemble à ceci :
CAST ( expression AS data_type [ ( length ) ] )
Ces arguments sont définis comme suit :
expression
- Toute expression valide.
data_type
- Le type de données cible. Cela inclut xml , bigint , et sql_variant . Les types de données d'alias ne peuvent pas être utilisés.
length
- Un entier facultatif qui spécifie la longueur du type de données cible. La valeur par défaut est
30
.
Exemple 1 – Convertir SYSDATETIME() en date
Dans cet exemple, nous générons la date/heure actuelle avec le SYSDATETIME()
fonction et convertir la valeur de retour en date type de données.
Notez que le SYSDATETIME()
génère sa valeur en tant que datetime2(7) type de données, nous le convertissons donc de ce type de données vers un autre type de données.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Résultat :
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Exemple 2 – Convertir SYSDATETIME() en smalldatetime
Dans cet exemple, nous transformons la date en smalldatetime type de données.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Résultat :
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Exemple 3 – Convertir SYSDATETIME() en datetimeoffset
Dans cet exemple, nous transformons la date en datetimeoffset type de données.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Résultat :
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Exemple 4 – Convertir SYSDATETIME() en temps
Vous n'êtes pas limité à l'affichage du composant de date de la valeur. Vous pouvez également le diffuser en heure type de données, de sorte que seul le composant de temps est renvoyé. Comme ceci :
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Résultat :
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Exemple 5 – Convertir SYSDATETIMEOFFSET() en date
Voici un exemple utilisant une fonction différente pour générer la valeur de date/heure d'origine :
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Résultat :
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Exemple 6 - Conversion à partir d'une requête de base de données
Voici un exemple de conversion de la date extraite d'une colonne dans WideWorldImporters exemple de base de données :
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS 'Converted' FROM Sales.CustomerTransactions;
Résultat :
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
J'ai également écrit un article qui montre comment convertir entre les formats de date à l'aide de CONVERT()
fonction en utilisant les mêmes exemples que ci-dessus.