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

Comment convertir entre les formats de date dans SQL Server à l'aide de CAST()

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

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.