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

Comment convertir une chaîne en une date/heure dans SQL Server à l'aide de CAST()

Dans SQL Server, vous pouvez utiliser le CAST() fonction pour convertir une expression d'un type de données en un autre. Cette fonction fonctionne presque de la même manière que CONVERT() fonction, sauf que la syntaxe est légèrement différente (et CAST() n'accepte pas le style arguments).

Donc, si vous avez besoin de convertir une chaîne en une valeur de date/heure, vous pouvez utiliser le CONVERT() fonction ou la fonction CAST() fonction.

Et si vous obtenez une erreur lors de l'utilisation de ces deux fonctions, le PARSE() fonction pourrait être exactement ce dont vous avez besoin.

Cet article contient des exemples utilisant le CAST() fonction.

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 en type de données de date

Dans cet exemple, nous convertissons la chaîne en date type de données (nous le spécifions en utilisant date comme second argument).

SELECT CAST('20 Dec 2018' AS date) AS Result;

Résultat :

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Tout comme avec CONVERT() la chaîne doit être dans un style pouvant être converti dans le type de données spécifié, sinon vous obtiendrez une erreur :

SELECT CAST('Homer' AS date) AS Result;

Résultat :

Conversion failed when converting date and/or time from character string.

Exemple 2 - Convertir en type de données datetime

Dans cet exemple, nous convertissons en datetime type de données :

SELECT CAST('20 Dec 2018' AS datetime) AS Result;

Résultat :

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

Vous pouvez également spécifier l'heure avec la date :

SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

Résultat :

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

Exemple 3 - Convertir en type de données datetime2

Ici, nous convertissons en datetime2 type de données :

SELECT CAST('20 Dec 2018' AS datetime2) AS Result;

Résultat :

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

Exemple 4 - Convertir en type de données datetimeoffset

Dans cet exemple, nous convertissons en datetimeoffset type de données :

SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;

Résultat :

+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

Exemple 5 - Convertir en type de données smalldatetime

Ici, nous convertissons en smalldatetime type de données :

SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;

Résultat :

+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

Exemple 6 - Convertir en type de données de temps

Dans cet exemple, nous convertissons en heure type de données :

SELECT CAST('20 Dec 2018' AS time) AS Result;

Résultat :

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

Dans ce cas, nous avons spécifié une date mais pas une heure, donc elle est revenue sous la forme 00:00:00 . Voici un autre exemple où nous spécifions une heure :

SELECT CAST('2pm' AS time) AS Result;

Résultat :

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Mais si nous ajoutons la date, nous obtenons une erreur (contrairement à un exemple précédent lorsque nous avons converti en datetime ):

SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;

Résultat :

Conversion failed when converting date and/or time from character string.

Donc, dans ce cas, vous devrez convertir en datetime ou smalldatetime .

Exemple 7 – Omettre la date

Si vous omettez la date lors de la conversion en datetime ou smalldatetime types de données, il renverra 1900-01-01 comme date :

SELECT CAST('2pm' AS datetime) AS Result;

Résultat :

+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

Si vous préférez utiliser pour utiliser le CONVERT() fonction, voir ces chaînes à date/heure CONVERT() exemples utilisant les mêmes exemples que ci-dessus.

De plus, comme mentionné, si vous obtenez une erreur en essayant de convertir une chaîne en date, essayez le PARSE() fonction à la place. Cela fonctionnera dans certains cas où CAST() non.