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

Cómo convertir entre formatos de fecha en SQL Server usando CAST()

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

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.