Este artículo es un esfuerzo para discutir y analizar las funciones de conversión de SQL y convertir SQL como parte de un seguimiento y actualización de los artículos anteriores, en el que hemos discutido varias sugerencias de SQL, como SQL fecha, SQL Coalesce, Unión SQL, SQL Join, SQL igual, Cadena SQL etc.
En algunas ocasiones necesitamos convertir datos entre los diferentes tipos de datos disponibles en SQL. Además de trabajar con datos, hay algunas funciones integradas que se pueden usar para convertir los datos. Así que echemos un vistazo más de cerca a las funciones de conversión SQL SQL CAST y SQL CONVERT.
Introducción
Para realizar operaciones o comparaciones o transformación entre los datos en una base de datos SQL Server, y los tipos de datos SQL ya que esos valores deben coincidir. Cuando los tipos de datos SQL son diferentes, pasarán por un proceso llamado conversión de tipos. La conversión de tipos de datos SQL, en este proceso, puede ser implícita o explícita.
Las funciones de conversión de tipos de datos comúnmente se usan especialmente para cumplir con los estándares de datos de los objetos específicos o sistemas de destino. Por ello estamos en el mundo tratando con una variedad de datos heterogéneos.
Nota: A walk-through of high-level concepts of data management is discussed in this article En este artículo, se analizan los conceptos de alto nivel de gestión de datos en las funciones de cadena SQL para Munging de datos (Wrangling)
A veces, los tipos de datos de los datos requeridos deben convertirse a otros tipos de datos para cálculos o transformación o procesos o para cumplir con los formatos de datos de destino. Por ejemplo, cuando multiplicamos datos de sistema decimal con un número entero, los datos experimentan una transformación interna y convierten implícitamente un número entero a tipo de datos en sistema decimal y lo que da lugar a tener el resultado en formato de datos decimales.
Conversión implícita y explícita de SQL
Cuando tratamos con dos valores que son de la misma naturaleza, pero diferentes tipos de datos, detrás de bastidores, el motor de la base de datos convierte los valores de tipo de datos más bajos en tipos de datos más altos antes de que pueda continuar con el cálculo. Este tipo se conoce como conversión implícita. Por otro lado, tenemos conversiones explícitas donde se puede llamar a una función SQL CAST o SQL CONVERT para cambiar el tipo de datos. Consecuentemente usted puede consultar la descripción general del formato de fecha SQL; Función DateDiff SQL, función DateAdd SQL y másartículos para ejemplos.
Sintaxis:
1 2 3 4 |
CAST CAST ( exp AS datatype [ ( len ) ] ) CONVERT CONVERT ( datatype [ ( len ) ] , expression [ , style ] ) |
exp
Define el argumento de expresión válido
datatype
Esto proporciona los detalles del tipo de datos de destino
len
Esto especifica la longitud del tipo de datos de destino. Este es un parámetro opcional por defecto, el valor de longitud se establece en 30
style
Es un valor entero utilizado con la función CONVERT SQL para traducir la expresión al resultado deseado
Tabla de conversión de datos de conversión y conversión de SQL
El siguiente cuadro de conversión es una hoja de referencia rápida para la conversión del tipo de datos.
Ejemplo 1: conversión implícita de SQL con números
En el siguiente ejemplo, se agregan dos números aleatorios 5 y 212345 y se muestran los resultados.
1 2 |
DECLARE @a int=5, @b bigint=212345 SELECT @a, @b, @a+@b |
Vemos que los dos valores son de diferentes tipos de datos, el motor de la base de datos convirtió implícitamente el valor int en un bigint antes de hacer la adición. Y luego podría procesar la operación de adición a medida que se convierten en el mismo tipo de datos.
Ejemplo 2: conversión implícita de SQL con caracteres
En el siguiente ejemplo, nosotros agregaremos dos tipos de datos de caracteres. Nosotros crearemos variables @ con un tipo de datos de caracteres y asignemos un valor ‘5’ y @b con un valor ‘2’.
1 2 |
DECLARE @a char='5', @b char='2' SELECT @a, @b, @a+@b |
En la salida, primero, obtenemos los valores de las variables ‘a’ y ‘b’, segundo el resultado del cálculo en el que son colocados ambos valores juntos. Con los valores de los caracteres en su lugar, el motor de la base de datos decidió implícitamente concatenar ambos valores y mostrar 52 como la salida del cálculo.
Ejemplo 3: Cómo realizar una conversión explícita usando SQL Cast
En el siguiente ejemplo, veremos cómo forzar la conversión de un tipo de datos a otro. Tomemos el ejemplo anterior y convierta los valores de entrada a tipo numérico y luego agreguemos esos valores.
1 2 |
DECLARE @a char='5', @b char='2' SELECT @a,@b, cast(@a as int)+ cast(@b as int) |
La función SQL CAST toma los dos argumentos. Primero, los datos que queremos procesar, en este caso, los datos son ‘5’ y ‘2’ y son del campo char, y luego cómo desea procesarlos o cómo queremos CAST (emitirlos). En este caso, desea CAST (emitirlos) como un campo de números enteros.
En la salida, usted observa que los valores de los caracteres de entrada se convierten y también se agregan esos valores y el resultado es de tipo entero.
Ejemplo 4: Manejo avanzado de errores usando TRY_CAST
En el siguiente ejemplo, analizaremos los valores de los tipos de datos mediante la función de conversión de SQL y la función try_cast de SQL.
En el siguiente SQL, el valor de cadena ‘123’ se convierte a BIGINT. Se lo pudo convertir debido a la naturaleza de los datos. Echemos un vistazo al segundo ejemplo, el valor de cadena ‘xyz’ se usa en la expresión para la función de conversión SQL. Cuando usted está haciendo esto, verá un error que indica “Error al convertir el tipo de datos varchar a bigint”. Cuando realiza el análisis de datos con varias fuentes de datos, generalmente obtenemos ese tipo de valores en los datos de origen. Entonces, para manejar este tipo de escenarios, puede usar la función SQL try_cast. En la tercera línea de SQL, pasamos la cadena como un valor de entrada, posteriormente si después de la ejecución, no hemos recibido un error, pero hemos terminado obteniendo un valor NULL como salida. El valor NULL puede simplificarse posteriormente utilizando la función SQL ISNULL o la función de fusión SQL.
Nota: Puede consultar el artículo Uso de la función de fusión de SQL en SQL Server para obtener más información.
1 2 3 4 5 6 7 |
SELECT TRY_CAST('123' AS BIGINT); GO SELECT CAST('xyz' AS BIGINT); GO SELECT TRY_CAST('xyz' AS BIGINT); GO SELECT ISNULL(TRY_CAST('xyz' AS BIGINT), 99); |
Ejemplo 5: código de estilo explicado en funciones CONVERT
El siguiente ejemplo convierte el campo hiredate a diferentes estilos disponibles de la función de conversión SQL. La función de conversión SQL primero comienza con un tipo de datos y una coma, y luego es seguida con una expresión. Con fechas, también tenemos otro argumento que podemos suministrar, que se llama código de estilo SQL. Puede obtener una lista de estos en el artículo CAST y CONVERT (Transact-SQL) documentación técnica.
1 2 3 4 5 6 7 8 9 |
SELECT hiredate, CONVERT(CHAR(50), hiredate), CONVERT(CHAR(50), hiredate, 1) 'S-1', CONVERT(CHAR(50), hiredate, 101) 's-101', CONVERT(CHAR(50), hiredate, 102) 's-102', CONVERT(CHAR(50), hiredate, 103) 's-103', CONVERT(CHAR(50), hiredate, 104) 's-104', CONVERT(CHAR(50), hiredate, 105) 's-105' FROM HumanResources.Employee; |
Sigamos adelante ejecutando el SQL mencionado anteriormente. Ahora podemos ver que se muestran diferentes resultados utilizando parámetros de estilo dentro de la función de conversión de SQL. Usted Puede ver que el campo de fecha de alquiler se convierte el campo de fecha en diferentes estilos.
Ejemplo 6: Las diferencias y similitudes entre CAST y CONVERT
En el siguiente ejemplo, puede ver que el uso de CAST y CONVERT en el siguiente T-SQL para comparar los tiempos de ejecución.
Ejecutemos el siguiente T-SQL para usar la función SQL CAST
1 2 3 4 5 6 7 8 9 10 11 |
SET STATISTICS TIME ON WITH temp AS (SELECT CAST(GETDATE() AS DATE) AS cast_date, 0 AS n UNION ALL SELECT CAST(GETDATE() + n AS DATE) AS cast_date, n + 1 FROM temp WHERE n < 1000000) SELECT MAX(cast_date) FROM temp OPTION(MAXRECURSION 0); |
Ahora, ejecute el mismo T-SQL con la función CONVERTIR SQL en su lugar.
1 2 3 4 5 6 7 8 9 10 11 |
SET STATISTICS TIME ON WITH temp AS (SELECT CONVERT(DATE, GETDATE(), 20) AS convert_date, 0 AS n UNION ALL SELECT CONVERT(DATE, GETDATE() + n, 20) AS convert_date, n + 1 FROM temp WHERE n < 1000000) SELECT MAX(convert_date) FROM temp OPTION(MAXRECURSION 0); |
Consejos rápidos:
- CAST es puramente un estándar ANSI-SQL. Pero, CONVERT es función específica de SQL Server del mismo modo que tenemos en to_char o to_date en Oracle
- CAST está predominantemente disponible en todos los productos de bases de datos debido a su portabilidad y facilidad de uso
- No habrá una diferencia importante en términos de ejecución de consultas entre las funciones SQL Cast y SQL Convert. Como usted Puede ver existe una ligera diferencia en los tiempos de ejecución, esto se debe a la conversión interna de SQL CAST y a su función nativa de CONVERTIR SQL, pero la función CONVERTIR viene con una opción “Código de estilo” para derivar varias combinaciones de fecha y hora, decimales y valores monetarios. En cualquier caso, la función CONVERT de SQL se ejecuta ligeramente mejor que la función CAST de SQL
Ejemplo 7: Código de estilo en el cálculo usando CONVERT
En este ejemplo, usted enumerará el campo de y nivel de la tabla “HumanResources.EmployeeHistory” de la base de datos Adventureworks2016. La segunda columna en el SQL se usa la función CONVERTIR SQL con el tipo de datos char (10) y los datos de la tasa de expresión lo multiplican por 1000.
En el primer ejemplo de SQL, el código de estilo no se usa, pero para el segundo y tercer ejemplo de SQL, el código de estilo se establece en 1.
1 2 3 4 5 6 7 8 9 |
SELECT TOP 3 Rate, CONVERT(CHAR(10), rate * 1000) AS TextPrice FROM HumanResources.EmployeePayHistory; SELECT TOP 3 Rate, CONVERT(CHAR(10), rate * 1000, 0) AS TextPrice FROM HumanResources.EmployeePayHistory; SELECT TOP 3 Rate, CONVERT(CHAR(10), rate * 1000, 1) AS TextPrice FROM HumanResources.EmployeePayHistory; |
En el producto de salida, podemos ver que la consulta con el código de estilo 1 devuelve una salida de texto con una coma como separador en la posición de miles. La consulta con el código de estilo 0 da como resultado la salida de texto sin separador de coma.
Resumen o Recapitulación
Hasta ahora, nosotros hemos hablado sobre las funciones de conversión de SQL, try_cast de SQL y conversión de SQL y de cómo puede convertir entre cadenas, números enteros y los valores de fecha y hora. También analizamos la función CONVERT de SQL con el código de estilo. Revisamos algunos ejemplos de las funciones de conversión SQL implícitas y explícitas. Y entendimos la diferencia entre las funciones SQL CAST y SQL CONVERT. También verá que se usa una expresión condicional con SQL ISNULL junto con SQL try_cast, y nuevamente, si yo lo hubiera hecho sin usar la parte de prueba de eso, ello habría fallado en lugar de retornar un valor. Así es como puede se puede emitir valores, lo que sigue un estándar, con este nivel adicional, y también cometer errores con mucha más gracia.
Eso es todo por ahora… Espero que hayas disfrutado leyendo este artículo. Siéntete libre de comentar abajo.
- Descripción general de la función SQL CAST y SQL CONVERT - December 6, 2019
- Revisión del operador relacional y descripción general dePivot y Unpivot estático y dinámico de SQL - November 6, 2019
- Revisión, ejemplos y uso de SQL Union - November 4, 2019