Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment convertir un format de date en un autre dans SQL Server à l'aide de CONVERT()

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 xmlbigint , 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.