Saltar al contenido

¿Cuál es la diferencia entre CAST y convert transact sql?

Cuando se trata del estilo, el comando CAST o el comando CONVERT es el mismo. ¿Cuál es su mejor método para asegurarse de que lo ha utilizado? Depende de su preferencia personal, pero es bueno saber que CAST es ANSI SQL y CONVERT no lo es. SQL server cuenta con la funcion convert la cual podemos usar en cualquiera de sus versiones mientras que CAST se utiliza como una funcion estandard entre los SGBD.

Este post te enseñara las diferencias entre una funcion y la otra!

Índice

    Que hace la funcion cast sql ejemplo

    la funcion cast es parte del estandard sql esto quiere decir que esta presente en todos los sistemas de gestion de base de datos, esto quiere decir que para todas esta es la funcion para convertir una columna que posee un tipo de datos a otro tipo de datos compatible. Para los fines la funcion cast oracle ejemplo posee la misma sintaxis que en mysql y sql server:

    select Cast( Columna , tipo de datos)

    Esto inddica que para todos lo sistema de gestion debemos tener una columna y un tipo de datos.

    Sintaxis select CAST y select CONVERT function

    Sql Server nos posee dos funciones para convertir tipo de datos, ambos hacen lo mismo en una instrucción, la función CONVERT de SQL Server tiene un parámetro adicional para expresar el estilo que marca una diferencia con relacion al sql cast.

    La sintaxis es la siguiente:

    1. Syntax Cast(expresión AS tipo de datos(longitud))
    2. CONVERT(tipo de datos (longitud), expresión, estilo)

    CONVERT o tsql cast tipos de datos

    Aunque la funciones son muy parecida es muy importante tomar encuenta sus principales diferencias al iniciar utilizar el select convert para los fines veremos las diferencia que existen entre cada una al tratar valores numericos. Los data types si importan para estas funciones

    Usar cast and convert para valores enteros

    Usando las dos funciones, obtenemos las siguientes declaraciones de TSQL:

    1. SELECT CAST(‘123’ AS INT);
    2. SELECT CONVERT(INT, ‘123’);

    Para los fines los valores texto a numericos se convierten sin ningun inconveniente

    Para los casos de convertir valores decimales a valores numeric enteros los valores se redondearian al valores enteros.

    Usar Convert o cast con decimales

    Convertir tipos de valores con longitud por defecto

    1. select cast( 1113.504 as decimal )
    2. select convert(decimal,1113.504)

    Para algunos casos necesitariamos convertir los valores a tamaños muy especificos de los tipos de datos, para eso las sintaxis seria

    1. select cast( 1113.504 as decimal(8,4) )
    2. select convert(decimal(8,4),1113.504)

    Si existiera datos mayores a los valores especificados pues el sistema marcaria un error de conversion.

    Cast Convert para varchar

    Es importante aclarar que casi cualquier tipo de datos se puede convertir en una cadena de texto. Al convertir a cadena, debe especificar una longitud, pero esto no es obligatorio en caso de no especificar la longitud sera truncada al valor maximo del campo.

    El uso de Convert sql y cast sql continua siendo el mismo para cada caso, la sintaxis y la salida de los datos es la misma:

    1. SELECT CONVERT(VARCHAR(250),’un texto muy largo fue escrito para probar’) AS campo
    2. SELECT CONVERT(VARCHAR,’un texto muy largo fue escrito para probar’) AS TestString
    3. SELECT cast( ‘un texto muy largo fue escrito para probar’ as varchar ) AS TestString
    4. SELECT cast( ‘un texto muy largo fue escrito para probar’ as varchar(250) ) AS TestString

    Al final los valores resultantes para cada caso con el cuso de la expression seria el mismo segun podemos ver imagen debajo.

    Cuales datos no pueden ser transformados?

    1. El tipo de datos de imagen no se puede convertir a cadena. Solo se puede convertir a binario o varbinary. Este tipo de datos está en desuso.
    2. El tipo de datos de marca de tiempo no se puede convertir a cadenas Unicode. A pesar de su nombre, no tiene nada que ver con fechas u horas, sino que en realidad es una especie de versión de fila. También está en desuso.

    Error al Convertir varchar a entero

    los valores decimales en un archivo excel exportado pueden ser cargados a tablas para luego proceder con una transformacion de la informcion para estos casos es posible que encontremos errores de conversion puesto que tanto convert como cast marcarian un error

    Conversion failed when converting the varchar value ‘1113.504’ to data type int.

    La solucion para esto es convertir al formato decimal que corresponde

    Sql convert varchar formatos y estilos

    Con la funcion T-SQL CONVERT, podemos hacer más que con SQL Server CAST. Digamos que podemos dar formatos especificos a valores tipo fechas lo cual seria imposible de hacer con el sql cast.

    Para ver un listado completo de que formato usar para hacer un convert datetime to dd mm yyyy o mm dd yy podemos consultarlo en nuestro articulo de como convertir fechas a un formato especificos. para este caso solo podremos usar select convert puesto estas conversión es posible en sql server mediante esta función.

    TRY_CAST para manejo de errores

    TRY_CAST es una función de SQL Server que permite convertir una expresión a un tipo de datos especificado. Si la conversión es exitosa, devuelve el resultado en el tipo de datos especificado, de lo contrario, devuelve NULL. Es útil para validar los datos en una columna antes de realizar una operación que requiere un tipo de datos específico. La sintaxis de TRY_CAST es la siguiente:

    Sintaxis general

    TRY_CAST (expression AS data_type)

    Donde expression es la expresión que se desea convertir y data_type es el tipo de datos al que se desea convertir.

    Ejemplo:

    SELECT TRY_CAST(‘123’ AS INT)

    Esto devolvería 123 como un entero.

    Conclusion

    La funcion convert sql se comporta exactamente igual que la función cast para el caso de convert para cualquiera de las versiones de sql server te permitira convertir valores tipo fecha a un formato de fecha especificado.