En SQL Server, puede usar CONVERT()
función para convertir un valor de fecha de un tipo de datos de fecha a otro (o entre cualquier otro tipo de datos). Sin embargo, esa no es la única función en la caja de herramientas de T-SQL para convertir entre tipos de datos.
El CAST()
La función es parte del estándar ANSI SQL y hace la mayoría de las cosas CONVERT()
hace. Entonces, en muchos casos, tiene la opción de cuál de estas funciones prefiere usar.
Muchos profesionales de bases de datos prefieren CAST()
debido al hecho de que es parte del estándar ANSI SQL, sin embargo, otros prefieren CONVERT()
debido a la funcionalidad adicional que ofrece la implementación de T-SQL (como poder proporcionar un estilo de fecha).
En cualquier caso, este artículo proporciona ejemplos de conversión entre diferentes formatos de fecha usando CAST()
.
Sintaxis
La sintaxis es así:
CAST ( expression AS data_type [ ( length ) ] )
Estos argumentos se definen de la siguiente manera:
expression
- Cualquier expresión válida.
data_type
- El tipo de datos de destino. Esto incluye xml , grande y sql_variant . No se pueden utilizar tipos de datos de alias.
length
- Un entero opcional que especifica la longitud del tipo de datos de destino. El valor predeterminado es
30
.
Ejemplo 1:emitir SYSDATETIME() como fecha
En este ejemplo, generamos la fecha/hora actual con SYSDATETIME()
función y convertir el valor de retorno como una fecha tipo de datos.
Tenga en cuenta que SYSDATETIME()
genera su valor como datetime2(7) tipo de datos, por lo que lo estamos convirtiendo de ese tipo de datos a otro tipo de datos.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Resultado:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Ejemplo 2:Transmitir SYSDATETIME() como smalldatetime
En este ejemplo, proyectamos la fecha como smalldatetime tipo de datos.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Resultado:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Ejemplo 3:Transmitir SYSDATETIME() como datetimeoffset
En este ejemplo, proyectamos la fecha como datetimeoffset tipo de datos.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Resultado:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Ejemplo 4:Transmitir SYSDATETIME() como hora
No está limitado a mostrar el componente de fecha del valor. También puedes lanzarlo como tiempo tipo de datos, de modo que solo se devuelva el componente de tiempo. Así:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Resultado:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Ejemplo 5:convertir SYSDATETIMEOFFSET() como fecha
Aquí hay un ejemplo usando una función diferente para generar el valor de fecha/hora original:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Resultado:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Ejemplo 6:conversión de una consulta de base de datos
Este es un ejemplo de cómo convertir la fecha que se recupera de una columna en WideWorldImporters base de datos de ejemplo:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS 'Converted' FROM Sales.CustomerTransactions;
Resultado:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
También escribí una publicación que muestra cómo convertir entre formatos de fecha usando CONVERT()
función usando los mismos ejemplos que arriba.