A veces, cuando se trabaja con bases de datos y otros entornos de programación, se obtiene un valor de fecha pero tiene un formato/tipo de datos incorrecto. Por ejemplo, si se generó una fecha con una función de fecha incorporada, podría incluir tanto la fecha como la hora, hasta el último nanosegundo. Y todo lo que desea es el día, mes y año, diga así:2018-01-01.
Si esto sucede mientras usa SQL Server, puede usar CONVERT()
para convertirlo a otro tipo de datos. Cuando haga esto, el tipo de datos determinará el formato en el que aparecerá.
Este artículo proporciona ejemplos del uso de CONVERT()
función en SQL Server para convertir un valor de fecha a otro tipo de datos (fecha).
Sintaxis
Primero, así es como funciona la sintaxis oficial:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
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
. style
- Una expresión entera que especifica cómo
CONVERT()
la función traducirá expresión . Para un valor de estilo NULL, se devuelve NULL. tipo_datos determina el rango.
Ejemplo 1:convertir de SYSDATETIME() al tipo de datos de fecha
En este ejemplo, generamos la fecha/hora actual con SYSDATETIME()
función y convertir eso a 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, CONVERT(date, SYSDATETIME()) AS Converted;
Resultado:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Ejemplo 2:convertir de SYSDATETIME() al tipo de datos smalldatetime
En este ejemplo, convertimos la fecha en smalldatetime tipo de datos.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Resultado:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Ejemplo 3:convertir de SYSDATETIME() al tipo de datos datetimeoffset
En este ejemplo, convertimos la fecha en un datetimeoffset tipo de datos.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Resultado:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Ejemplo 4:convertir de SYSDATETIME() a tipo de datos de tiempo
No está limitado a mostrar el componente de fecha del valor. También puede convertirlo en una hora. tipo de datos, de modo que solo se devuelva el componente de tiempo. Así:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Resultado:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Ejemplo 5:convertir desde SYSDATETIMEOFFSET()
Todos los ejemplos anteriores usan la misma función incorporada para generar el valor de fecha/hora, pero, por supuesto, no es necesario que lo genere esta única función. Aquí hay un ejemplo usando SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Resultado:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Ejemplo 6:convertir desde una consulta de base de datos
Este es un ejemplo de cómo convertir la fecha que se recupera de una columna en la base de datos de ejemplo de WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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 | +-----------------------------+-------------+
Tenga en cuenta que no está limitado a solo convertir entre dos formatos de fecha diferentes. Si tiene una fecha almacenada como una cadena, por ejemplo, también puede usar CONVERT()
para convertir de una cadena a una fecha, así como cualquier otro tipo de datos al que pueda necesitar convertir.
También escribí una publicación que muestra cómo convertir entre formatos de fecha usando CAST()
función usando los mismos ejemplos que arriba.