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

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

Si trabaja con SQL Server, es probable que haya utilizado al menos uno de los CONVERT() o CAST() funciones para convertir de un tipo de datos a otro. Si alguna vez ha encontrado un error al intentar convertir una cadena en un tipo de datos de fecha/hora, el PARSE() función podría ser lo que necesita.

Por ejemplo, si tiene una cadena como digamos, Viernes, 20 de julio de 2018 , el CONVERT() o CAST() las funciones arrojarán un error. Pero el PARSE() la función lo manejará sin problemas.

El PARSE() La función devuelve el resultado de una expresión, traducida al tipo de datos solicitado en SQL Server. Entonces puede usarlo para "traducir" su valor de cadena en un tipo de datos de fecha/hora (como fecha , fechahora , fechahora2 , etc.).

Sintaxis

Esta es la sintaxis para PARSE() función:

PARSE ( string_value AS data_type [ USING culture ] )

Donde string_value es el valor que desea analizar, data_type es el tipo de datos que desea analizar y culture es un argumento opcional que puede usar para especificar qué formato de idioma usar al analizar la cadena.

Ejemplo básico

Aquí hay un ejemplo básico para demostrar el uso.

SELECT PARSE('Friday, 20 July 2018' AS datetime2) 
AS 'Result';

Resultado:

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

Eliminar la parte de tiempo

En el ejemplo anterior, especificamos que la cadena debe analizarse como datetime2 tipo de datos. Este tipo de datos incluye el componente de tiempo con una alta precisión. Si no necesita el componente de tiempo, siempre puede analizarlo como una fecha tipo de datos.

Este es el resultado si especificamos una fecha tipo de datos:

SELECT PARSE('Friday, 20 July 2018' AS date) 
AS 'Result';

Resultado:

+------------+
| Result     |
|------------|
| 2018-07-20 |
+------------+

Mantener la parte de tiempo, pero con menos precisión

Y si haces necesita el tiempo, pero con menos precisión, siempre puede usar el smalldatetime tipo de datos:

SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) 
AS 'Result';

Resultado:

+---------------------+
| Result              |
|---------------------|
| 2018-07-20 14:36:00 |
+---------------------+

Pero si eso no es lo suficientemente preciso, siempre está la fecha y hora tipo de datos:

SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) 
AS 'Result';

Resultado:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-07-20 14:35:50.523 |
+-------------------------+

Variaciones de la entrada de fecha

El PARSE() La función generalmente puede calcular la fecha que está tratando de convertir, siempre que la proporcione como una representación válida del tipo de datos solicitado. Estos son algunos ejemplos de la fecha que se proporciona en varios estilos:

SELECT 
    PARSE('Friday, 20 July 2018' AS date) AS 'Result 1',
    PARSE('Fri, 20 July 2018' AS date) AS 'Result 2',
    PARSE('Friday, July 20 2018' AS date) AS 'Result 3',
    PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';

Resultado:

+------------+------------+------------+------------+
| Result 1   | Result 2   | Result 3   | Result 4   |
|------------+------------+------------+------------|
| 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
+------------+------------+------------+------------+

Sin embargo, no es psíquico:

SELECT PARSE('Next Friday' AS date) 
AS 'Result';

Resultado:

Error converting string value 'Next Friday' into data type date using culture ''. 

Añadir una cultura

Puede agregar un tercer argumento para especificar en qué cultura está formateada su cadena. Por ejemplo, si su fecha es 01/06/2018 , esto podría significar 6 de enero de 2018 o 1 de junio de 2018 , según la referencia cultural que se utilice.

Aquí hay un ejemplo de cómo especificar la cultura:

SELECT 
    PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US',
    PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';

Resultado:

+------------+------------+
| en-US      | en-GB      |
|------------+------------|
| 2018-01-06 | 2018-06-01 |
+------------+------------+

Si no proporciona este argumento, se utiliza el idioma de la sesión actual.

Proporcionar el día de semana equivocado

El PARSE() La función es bastante inteligente, ya que, si proporciona el día de la semana incorrecto, devolverá un error.

Entonces, si usamos la misma fecha que en los ejemplos anteriores, pero cambiamos el día de la semana de viernes a jueves, esto es lo que sucede:

SELECT PARSE('Thursday, 20 July 2018' AS date) 
AS 'Result';

Resultado:

Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.