Cuando trabajamos con SQL Server, a menudo nos encontramos en situaciones en las que necesitamos convertir datos entre diferentes tipos de datos. Ya sea para formatear datos para su visualización o convertir la entrada del usuario para almacenarla en una columna específica, la función CONVERT en SQL Server es una herramienta poderosa que puede ayudarnos a lograr estas tareas.
¿Qué es la función CONVERT?
La función CONVERT es una función de conversión en SQL Server que te permite convertir datos entre diferentes tipos de datos y formatear el resultado al mismo tiempo. Es importante tener en cuenta que la función CONVERT es específica de SQL Server y no forma parte del estándar ANSI. Si necesitas una función que sea independiente de la plataforma, puedes usar la función CAST en su lugar.
¿Cómo usar la función CONVERT?
La sintaxis de la función CONVERT es la siguiente:
CONVERT(tipo_de_dato[(longitud)], expresión [, estilo])
El argumento expresión
es el valor que deseas convertir y puede ser cualquier expresión válida de SQL Server. El argumento tipo_de_dato
es el tipo de datos de destino y el argumento opcional longitud
puede especificar la longitud del tipo de datos de destino si se permite una longitud especificada por el usuario. El argumento estilo
es una expresión entera que especifica cómo la función traducirá la expresión. El rango de valores para el argumento estilo
está determinado por el tipo_de_dato
especificado.
Ejemplos usando la función CONVERT
Echemos un vistazo a algunos ejemplos para entender cómo funciona la función CONVERT:
-- Formatear una fecha en diferentes estilos SELECT GETDATE() AS "getdate", CONVERT(VARCHAR, GETDATE(), 0) AS getdate_0, CONVERT(VARCHAR, GETDATE(), 2) AS getdate_2, CONVERT(VARCHAR, GETDATE(), 102) AS getdate_102, CONVERT(VARCHAR, GETDATE(), 13) AS getdate_13, CONVERT(VARCHAR, GETDATE(), 120) AS getdate_120; -- Redondear o truncar valores numéricos SELECT 1.32312 AS "float", CONVERT(INT, CAST(1.32312 AS FLOAT)) AS float_truncate_int, CONVERT(NUMERIC(9,2), CAST(1.32312 AS FLOAT)) AS float_round_numeric, CONVERT(FLOAT, CAST(-1.623 AS NUMERIC)) AS numeric_round_float; -- Agregar comas a valores monetarios SELECT 2332242.23 AS "money", CONVERT(VARCHAR, CAST(2332242.23 AS MONEY), 1) AS money_1; -- Mostrar valores decimales en notación científica SELECT 223.532343 AS "notación científica", CONVERT(VARCHAR, CAST(223.532343 AS FLOAT), 2) AS float_2; -- Convertir tipos de datos de gran valor SELECT CAST('Este es un ejemplo de una columna grande' AS TEXT) AS "texto", CONVERT(VARCHAR(10), CAST('Este es un ejemplo de una columna grande' AS TEXT)) AS texto_varchar10; -- Convertir texto a binario y viceversa SELECT CONVERT(VARBINARY(32), 'Comentario de prueba', 0) AS comentario_como_varbinary, CONVERT(VARCHAR(32), 0x5465737420436F6D6D656E74, 0) AS comentario_como_varchar; -- Convertir una cadena a XML SELECT CONVERT(XML, ''); -- Convertir columnas numéricas a texto para concatenación SELECT TOP 10 'Quedan ' + CONVERT(VARCHAR, [Cantidad]) + ' en inventario para ProductID:' + CONVERT(VARCHAR, [ProductID]) + ' en LocationID:' + CONVERT(VARCHAR, [LocationID]) AS "cadena concatenada" FROM [Production].[ProductInventory];
Usar CONVERT en condiciones de cláusulas WHERE
Al igual que otras funciones, la función CONVERT se puede usar en condiciones WHERE. Sin embargo, es importante tener en cuenta que envolver un nombre de columna con la función CONVERT puede evitar el uso de un índice en esa columna. En su lugar, envuelve el valor literal que estás buscando con la función. Aquí tienes un ejemplo:
-- Agregar un índice en la columna PostTime CREATE NONCLUSTERED INDEX [IX_DatabaseLog_PostTime] ON [dbo].[DatabaseLog] ([PostTime] ASC); -- Usar CONVERT en una cláusula WHERE para filtrar resultados SELECT * FROM [dbo].[DatabaseLog] WHERE PostTime > CONVERT(DATETIME, '2017-10-27 14:33:17.275', 121);
Al usar la función CONVERT en la cláusula WHERE, podemos filtrar los resultados en función de un valor de fecha convertido. El plan de ejecución también mostrará que se está utilizando el índice que agregamos.
Opciones alternativas
Además de la función CONVERT, SQL Server proporciona opciones alternativas para la conversión de datos:
- CAST: La función CAST es una función estándar ANSI que es similar a la función CONVERT, pero no admite el formato de salida con un estilo.
- FORMAT: La función FORMAT se puede utilizar para el formato sensible a la configuración regional de cadenas de fecha y numéricas.
- PARSE: La función PARSE se puede utilizar para traducir cualquier valor de cadena a su equivalente de tipo de datos de fecha u número.
Cada una de estas funciones tiene sus propias ventajas y limitaciones. Aquí tienes una comparación de las diferencias entre estas funciones y la función CONVERT:
Función | Tipo de argumento | Tipo de retorno | Argumento de estilo | Soporte para conversión entre tipos |
---|---|---|---|---|
CONVERT | Expresión SQL | Especificado por el argumento | Sí | Cualquier tipo |
CAST | Expresión SQL | Especificado por el argumento | No | Cualquier tipo |
FORMAT | Expresión SQL | Especificado por el argumento | Sí | Cualquier tipo |
PARSE | Cadena | Especificado por el argumento | No | De cadena a fecha o número solamente |
Comprender las diferencias entre estas funciones puede ayudarte a elegir la más adecuada para tus necesidades específicas.
En conclusión, la función CONVERT de SQL Server es una herramienta versátil que te permite convertir datos entre diferentes tipos de datos y formatear el resultado al mismo tiempo. Al comprender su sintaxis y uso, puedes manipular y mostrar datos de manera efectiva en tus consultas y scripts de SQL Server.
Última actualización del artículo: 2022-01-20