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

Comment extraire ou convertir des données temporelles à partir d'une chaîne dans SQL Server

Problème :

Vous souhaitez convertir une chaîne contenant une date et une heure en une valeur TIME dans SQL Server.

Nous devons convertir une chaîne contenant un nom de jour de la semaine, une date et une heure en une valeur TIME.

Solution 1 :

Nous utiliserons le PARSE() une fonction. Voici la requête que vous écririez :

SELECT 
  PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Voici le résultat :

11:23:11.1134505

Discussion :

Utilisez le PARSE() pour convertir une chaîne contenant un nom de jour de la semaine, une date et une heure en type de données TIME. Cette fonction prend la chaîne à convertir, le mot clé AS et un nouveau type de données (dans notre exemple, TIME ). La chaîne doit contenir une valeur qui représente ce type de données. Dans notre exemple, la chaîne 'February 2, 2020 11:23:11.1134505' stocke une valeur de temps.

Notez que l'heure n'est qu'une partie de cette chaîne, qui contient également le nom du jour de la semaine. N'utilisez pas le CONVERT() ou CAST() fonctions dans ce cas; ils renvoient également un type de données TIME, mais sans le jour de la semaine.

Si vous utilisez une langue parlée différente de la langue du serveur, incluez le mot-clé USING et le code de culture approprié. Pour la langue polonaise, vous écririez :

SELECT 
  PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) 
  AS time_value;

Pour en savoir plus sur les valeurs des paramètres de culture, consultez la documentation officielle de SQL Server.

Dans ce cas, vous devez utiliser le PARSE() fonction, même s'il n'a pas les meilleures performances. Si vous opérez sur une chaîne représentant une valeur de temps qui ne le fait pas stocker des données supplémentaires (comme le nom du jour de la semaine), utilisez le CASE() une fonction. Voici un exemple.

Solution 2 :

SELECT 
  CAST('2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Voici le résultat :

11:23:11.1134505

La chaîne contenant la date et l'heure à convertir doit être au format du type de données de date et d'heure T-SQL. Vous pouvez en savoir plus dans la documentation de SQL Server.

Le CAST() la fonction est ANSI SQL Standard et ses performances sont meilleures que CONVERT() ou PARSE() .

Enfin, vous pouvez également utiliser le CONVERT() une fonction. Regardez l'exemple suivant.

Solution 3 :

  SELECT 
  CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') 
  AS time_value;

Le résultat :

11:23:11.1134505

Le CONVERT() La fonction prend trois arguments :le nouveau type de données, la chaîne à convertir et le format souhaité (facultatif). Cependant, vous ne devez utiliser cette fonction que si vous devez spécifier comment les données de date et d'heure doivent être formatées, car ses performances ne sont pas aussi bonnes que CAST() .