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

Cómo convertir una cadena en una fecha/hora en SQL Server usando CAST()

En SQL Server, puede usar CAST() función para convertir una expresión de un tipo de datos a otro. Esta función funciona casi igual que CONVERT() función, excepto que la sintaxis es ligeramente diferente (y CAST() no acepta el style argumento).

Entonces, si necesita convertir una cadena en un valor de fecha/hora, puede usar CONVERT() o la función CAST() función.

Y si obtiene un error al usar esas dos funciones, PARSE() función podría ser justo lo que necesita.

Este artículo contiene ejemplos usando CAST() función.

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:convertir a tipo de datos de fecha

En este ejemplo, convertimos la cadena en una fecha tipo de datos (lo especificamos usando date como segundo argumento).

SELECT CAST('20 Dec 2018' AS date) AS Result;

Resultado:

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Al igual que con CONVERT() la cadena debe tener un estilo que se pueda convertir al tipo de datos especificado; de lo contrario, obtendrá un error:

SELECT CAST('Homer' AS date) AS Result;

Resultado:

Conversion failed when converting date and/or time from character string.

Ejemplo 2:convertir a tipo de datos de fecha y hora

En este ejemplo, convertimos a datetime tipo de datos:

SELECT CAST('20 Dec 2018' AS datetime) AS Result;

Resultado:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

También puede especificar la hora junto con la fecha:

SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

Resultado:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

Ejemplo 3:convertir al tipo de datos datetime2

Aquí convertimos al datetime2 tipo de datos:

SELECT CAST('20 Dec 2018' AS datetime2) AS Result;

Resultado:

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

Ejemplo 4:convertir a tipo de datos datetimeoffset

En este ejemplo, convertimos a datetimeoffset tipo de datos:

SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;

Resultado:

+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

Ejemplo 5:convertir a tipo de datos smalldatetime

Aquí convertimos a smalldatetime tipo de datos:

SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;

Resultado:

+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

Ejemplo 6:convertir a tipo de datos de tiempo

En este ejemplo convertimos a la hora tipo de datos:

SELECT CAST('20 Dec 2018' AS time) AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

En ese caso, especificamos una fecha pero no una hora, por lo que volvió como 00:00:00 . Aquí hay otro ejemplo en el que en realidad especificamos una hora:

SELECT CAST('2pm' AS time) AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Pero si agregamos la fecha, obtenemos un error (a diferencia de un ejemplo anterior cuando convertimos a datetime ):

SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;

Resultado:

Conversion failed when converting date and/or time from character string.

Entonces, en este caso, deberá convertir a datetime o pequeña fecha y hora .

Ejemplo 7:omisión de la fecha

Si omite la fecha al convertir a datetime o pequeña fecha y hora tipos de datos, devolverá 1900-01-01 como la fecha:

SELECT CAST('2pm' AS datetime) AS Result;

Resultado:

+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

Si prefiere usar para usar CONVERT() función, vea esta cadena para fecha/hora CONVERT() ejemplos usando los mismos ejemplos que arriba.

Además, como se mencionó, si obtiene un error al intentar convertir una cadena en una fecha, intente PARSE() función en su lugar. Funcionará en algunos casos donde CAST() no.