Parfois, lorsque vous travaillez avec des bases de données et d'autres environnements de programmation, vous obtenez une valeur de date mais elle est dans le mauvais format/type de données. Par exemple, si une date a été générée avec une fonction de date intégrée, elle peut inclure à la fois la date et l'heure, jusqu'à la dernière nanoseconde. Et tout ce que vous voulez, c'est le jour, le mois et l'année, dites comme ceci :2018-01-01.
Si cela se produit pendant que vous utilisez SQL Server, vous pouvez utiliser la commande CONVERT()
fonction pour le convertir en un autre type de données. Lorsque vous faites cela, le type de données déterminera le format dans lequel il apparaît.
Cet article fournit des exemples d'utilisation de CONVERT()
fonction dans SQL Server pour convertir une valeur de date en un autre type de données (date).
Syntaxe
Tout d'abord, voici comment fonctionne la syntaxe officielle :
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
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
. style
- Une expression entière qui spécifie comment le
CONVERT()
la fonction traduira expression . Pour une valeur de style NULL, NULL est renvoyé. type_données détermine la plage.
Exemple 1 - Convertir de SYSDATETIME() en type de données date
Dans cet exemple, nous générons la date/heure actuelle avec le SYSDATETIME()
fonction et convertissez-la en une 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, CONVERT(date, SYSDATETIME()) AS Converted;
Résultat :
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Exemple 2 - Conversion de SYSDATETIME() en type de données smalldatetime
Dans cet exemple, nous convertissons la date en smalldatetime type de données.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Résultat :
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Exemple 3 - Conversion de SYSDATETIME() en type de données datetimeoffset
Dans cet exemple, nous convertissons la date en un datetimeoffset type de données.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Résultat :
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Exemple 4 - Conversion de SYSDATETIME() en type de données temporelles
Vous n'êtes pas limité à l'affichage du composant de date de la valeur. Vous pouvez également le convertir en une heure type de données, de sorte que seul le composant de temps est renvoyé. Comme ceci :
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Résultat :
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Exemple 5 - Convertir à partir de SYSDATETIMEOFFSET()
Les exemples précédents utilisent tous la même fonction intégrée pour générer la valeur date/heure, mais bien sûr, elle n'a pas besoin d'être générée par cette seule fonction. Voici un exemple utilisant le SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Résultat :
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Exemple 6 - Convertir à partir d'une requête de base de données
Voici un exemple de conversion de la date extraite d'une colonne de l'exemple de base de données WideWorldImporters :
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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 | +-----------------------------+-------------+
Notez que vous n'êtes pas limité à la simple conversion entre deux formats de date différents. Si vous avez une date stockée sous forme de chaîne par exemple, vous pouvez également utiliser CONVERT()
pour convertir une chaîne en une date, ainsi que tout autre type de données vers lequel vous pourriez avoir besoin de convertir.
J'ai également écrit un article qui montre comment convertir entre les formats de date à l'aide de CAST()
fonction en utilisant les mêmes exemples que ci-dessus.