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

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

Si vous travaillez avec SQL Server, il y a de fortes chances que vous ayez utilisé au moins un des CONVERT() ou CAST() fonctions pour convertir d'un type de données à un autre. Si vous avez déjà rencontré une erreur en essayant de convertir une chaîne en un type de données date/heure, le PARSE() fonction pourrait être ce dont vous avez besoin.

Par exemple, si vous avez une chaîne telle que, par exemple, Fri, 20 Jul 2018 , le CONVERT() ou CAST() les fonctions renverront une erreur. Mais le PARSE() la fonction le gérera sans problème.

Le PARSE() La fonction renvoie le résultat d'une expression, traduite dans le type de données demandé dans SQL Server. Vous pouvez donc l'utiliser pour "traduire" votre valeur de chaîne en un type de données date/heure (tel que date , dateheure , dateheure2 , etc.).

Syntaxe

Voici la syntaxe pour le PARSE() fonction :

PARSE ( string_value AS data_type [ USING culture ] )

string_value est la valeur que vous voulez analyser, data_type est le type de données dans lequel vous voulez qu'il soit analysé, et culture est un argument facultatif que vous pouvez utiliser pour spécifier le format de langue à utiliser lors de l'analyse de la chaîne.

Exemple de base

Voici un exemple de base pour illustrer l'utilisation.

SELECT PARSE('Friday, 20 July 2018' AS datetime2) 
AS 'Result';

Résultat :

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

Supprimer la partie horaire

Dans l'exemple précédent, nous avons spécifié que la chaîne devait être analysée en tant que datetime2 Type de données. Ce type de données inclut la composante temporelle avec une précision élevée. Si vous n'avez pas besoin du composant de temps, vous pouvez toujours l'analyser comme une date type de données.

Voici le résultat si nous spécifions une date type de données :

SELECT PARSE('Friday, 20 July 2018' AS date) 
AS 'Result';

Résultat :

+------------+
| Result     |
|------------|
| 2018-07-20 |
+------------+

Gardez la partie temporelle, mais avec moins de précision

Et si vous faites besoin de temps, mais avec moins de précision, vous pouvez toujours utiliser le smalldatetime type de données :

SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) 
AS 'Result';

Résultat :

+---------------------+
| Result              |
|---------------------|
| 2018-07-20 14:36:00 |
+---------------------+

Mais si ce n'est pas assez précis, il y a toujours le datetime type de données :

SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) 
AS 'Result';

Résultat :

+-------------------------+
| Result                  |
|-------------------------|
| 2018-07-20 14:35:50.523 |
+-------------------------+

Variations de la saisie de la date

Le PARSE() La fonction peut généralement déterminer la date que vous essayez de convertir, tant que vous la fournissez comme une représentation valide du type de données demandé. Voici quelques exemples de date fournie dans différents styles :

SELECT 
    PARSE('Friday, 20 July 2018' AS date) AS 'Result 1',
    PARSE('Fri, 20 July 2018' AS date) AS 'Result 2',
    PARSE('Friday, July 20 2018' AS date) AS 'Result 3',
    PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';

Résultat :

+------------+------------+------------+------------+
| Result 1   | Result 2   | Result 3   | Result 4   |
|------------+------------+------------+------------|
| 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
+------------+------------+------------+------------+

Cependant, ce n'est pas psychique :

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

Résultat :

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

Ajouter une culture

Vous pouvez ajouter un troisième argument pour spécifier la culture dans laquelle votre chaîne est formatée. Par exemple, si votre date est 01/06/2018 , cela pourrait signifier soit 6 janvier 2018 ou 1er juin 2018 , selon la culture utilisée.

Voici un exemple de spécification de la culture :

SELECT 
    PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US',
    PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';

Résultat :

+------------+------------+
| en-US      | en-GB      |
|------------+------------|
| 2018-01-06 | 2018-06-01 |
+------------+------------+

Si vous ne fournissez pas cet argument, la langue de la session en cours est utilisée.

Fournir le mauvais jour de la semaine

Le PARSE() La fonction est assez intelligente, en ce sens que si vous fournissez le mauvais jour de la semaine, elle renverra une erreur.

Donc, si nous utilisons la même date que dans les exemples précédents, mais que nous changeons le jour de la semaine du vendredi au jeudi, voici ce qui se passe :

SELECT PARSE('Thursday, 20 July 2018' AS date) 
AS 'Result';

Résultat :

Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.