sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo extraer o convertir datos de tiempo de una cadena en SQL Server

Problema:

Le gustaría convertir una cadena que contiene una fecha y una hora en un valor TIME en SQL Server.

Necesitamos convertir una cadena que contenga el nombre del día de la semana, la fecha y la hora en un valor TIME.

Solución 1:

Usaremos el PARSE() función. Esta es la consulta que escribirías:

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

Aquí está el resultado:

11:23:11.1134505

Discusión:

Usa el PARSE() función para convertir una cadena que contiene un nombre de día de la semana, fecha y hora al tipo de datos TIME. Esta función toma la cadena para convertir, la palabra clave AS y un nuevo tipo de datos (en nuestro ejemplo, TIME ). La cadena debe contener un valor que represente este tipo de datos. En nuestro ejemplo, la cadena 'February 2, 2020 11:23:11.1134505' almacena un valor de tiempo.

Tenga en cuenta que la hora es solo una parte de esta cadena, que también contiene el nombre del día de la semana. No use el CONVERT() o CAST() funciones en este caso; también devuelven un tipo de dato TIME, pero sin el día de la semana.

Si usa un idioma hablado que es diferente del idioma del servidor, incluya la palabra clave USO y el código cultural apropiado. Para el idioma polaco, escribirías:

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

Para obtener más información sobre los valores de los parámetros culturales, consulte la documentación oficial de SQL Server.

En este caso, debe usar PARSE() función, a pesar de que no tiene el mejor rendimiento. Si está operando en una cadena que representa un valor de tiempo que no almacene datos adicionales (como el nombre del día de la semana), use CASE() función. Aquí hay un ejemplo.

Solución 2:

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

Aquí está el resultado:

11:23:11.1134505

La cadena que contiene la fecha y la hora para convertir debe tener el formato del tipo de datos de fecha y hora T-SQL. Puede leer más en la documentación de SQL Server.

El CAST() la función es ANSI SQL Standard y su rendimiento es mejor que CONVERT() o PARSE() .

Finalmente, también puede usar CONVERT() función. Mira el siguiente ejemplo.

Solución 3:

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

El resultado:

11:23:11.1134505

El CONVERT() La función toma tres argumentos:el nuevo tipo de datos, la cadena para convertir y el formato deseado (opcional). Sin embargo, solo debe usar esta función si necesita especificar cómo deben formatearse los datos de fecha y hora, porque su rendimiento no es tan bueno como CAST() .