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

6 façons de convertir une chaîne en une valeur de date/heure dans SQL Server

Si vous devez convertir une chaîne en une valeur de date/heure dans SQL Server, vous disposez de plusieurs options. Dans cet article, je décris six fonctions T-SQL qui vous permettent de le faire.

Les six fonctions sont :

  • CAST()
  • CONVERT()
  • PARSE()
  • TRY_CAST()
  • TRY_CONVERT()
  • TRY_PARSE()

Vous trouverez ci-dessous un exemple de la façon dont vous pouvez utiliser ces fonctions pour convertir une chaîne en un type de données date/heure.

La fonction CAST()

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

Pour plus d'exemples, consultez Comment convertir une chaîne en date/heure dans SQL Server à l'aide de CAST() .

La fonction CONVERT()

Ici, on fait la même conversion que l'exemple précédent, mais avec le CONVERT() une fonction. La seule différence ici est la syntaxe.

SELECT CONVERT(date, '20 Dec 2018') AS Result;

Résultat :

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

Pour plus d'exemples, consultez Comment convertir une chaîne en une date/heure dans SQL Server à l'aide de CONVERT() .

La fonction PARSE()

Dans cet exemple, j'ajoute le jour de la semaine dans le cadre de la chaîne. La raison pour laquelle je fais cela est de démontrer l'avantage que cette fonction a sur les autres. Si vous fournissez la date dans ce format aux autres fonctions, vous obtiendrez une erreur. Mais le PARSE() la fonction peut gérer ceci :

SELECT PARSE('Thursday, 20 Dec 2018' AS datetime2) 
AS 'Result';

Résultat :

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

Pour plus d'exemples, consultez Comment convertir une chaîne en une date/heure dans SQL Server à l'aide de PARSE() .

La fonction TRY_CAST()

Vous pouvez utiliser TRY_CAST() au lieu de CAST() pour fournir un moyen plus fluide de gérer les erreurs. Lors de l'utilisation de CAST() fonction, si le cast échoue, il renvoie une erreur. Cependant, si vous utilisez le TRY_CAST() fonction à la place, elle renvoie NULL dans de tels cas.

Voici un exemple d'échec de distribution :

SELECT TRY_CAST('Next month' AS date) AS Result;

Résultat :

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Si nous fournissons la même valeur au CAST() fonction à la place, voici ce qui se passe :

SELECT CAST('Next month' AS date) AS Result;

Résultat :

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

Pour plus d'exemples, consultez CAST contre TRY_CAST dans SQL Server :quelle est la différence ?

La fonction TRY_CONVERT()

Vous pouvez également utiliser TRY_CONVERT() au lieu de CONVERT() pour une meilleure gestion des erreurs. Si le CONVERT() la fonction échoue, elle renvoie une erreur. Mais si le TRY_CONVERT() échoue, il renvoie NULL .

Voici un exemple d'échec de conversion :

SELECT TRY_CONVERT(date, 'Next month') AS Result;

Résultat :

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Si nous fournissons la même valeur au CONVERT() fonction à la place, voici ce qui se passe :

SELECT CONVERT(date, 'Next month') AS Result;

Résultat :

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

Pour plus d'exemples, consultez CONVERT vs TRY_CONVERT dans SQL Server :quelle est la différence ?

La fonction TRY_PARSE()

Vous pouvez également utiliser TRY_PARSE() au lieu de PARSE() pour une meilleure gestion des erreurs. Si le PARSE() la fonction échoue, elle renvoie une erreur. Mais si le TRY_PARSE() échoue, il renvoie NULL .

Voici un exemple d'échec de conversion :

SELECT TRY_PARSE('Next month' AS date) AS Result;

Résultat :

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Si nous fournissons la même valeur au PARSE() fonction à la place, voici ce qui se passe :

SELECT PARSE('Next month' AS date) AS Result;

Résultat :

Error converting string value 'Next month' into data type date using culture ''.