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

Cómo convertir de un formato de fecha a otro en SQL Server usando CONVERT()

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 xmlgrandesql_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.