Cómo evitar errores en SQL Server al concatenar campos con valores numéricos

El operador para concatenar en SQL Server es '+', pero este operador sirve también para sumar valores.

Como es el mismo operador para las dos cosas, el analizador de consultas hace una concatenación o una suma en funcion del tipo de datos de los campos que se están tratando. Si los campos son de tipo 'string' concatena, y si se trata de campos numéricos, dos enteros, por ejemplo, suma los dos valores.

cadena rota (concatenar en SQL)

El problema viene cuando se encuentra un campo de cada tipo y el operador '+' en medio. En este caso, el motor puede devolver un error de conversión porque al encontrarse un campo numérico intenta hacer la suma y, claro, el otro campo es una cadena.
 
Por ejemplo, tenemos estos campos en una tabla TablaEmpleados:
  strNombre --> nvarchar(10)
  intEdad      --> integer
 

Si hacemos esta SELECT con SQL Server:

SELECT strNombre + ' tiene ' + intEdad + ' años'  
FROM TablaEmpleados

Nos encontraremos este mensaje de error:


Mens. 245, Nivel 16, Estado 1, Lnea 1
Error de conversion al convertir el valor nvarchar 'años' 
al tipo de datos int.

 

La solución es bastante simple, si lo que se quiere es concatenar, hay que convertir a cadena cualquier campo de tipo numérico que intervenga en la concatenación:

SELECT strNombre + ' tiene ' + cast(intEdad as varchar) + ' años'  
FROM TablaEmpleados

 

Comentar también que este problema es específico de SQL Server, ya que el operador estandar SQL para concatenar es '||', que es el que utilizan otras bases de datos como Oracle. MySQL, aunque no utiliza el estandar, concatena con la función CONCAT()

De esta manera, en ambas BBDD (Oracle y MySQL) el operador '+' se utiliza sólo para sumar, por lo que al concatenar nunca pasará que el analizador interprete que se quiere realizar una operación aritmética.

 


Libros de SQL Server

¿Quieres profundizar más en Transact-SQL o en administración de bases de datos SQL? Puedes hacerlo consultando alguno de estos libros de SQL Server.

O puedes revisar la lista de los últimos libros de SQL Server publicados en Amazon según lo que te interese aprender.


Gracias por compartir esta información, llevaba tiempo sin realizar varias consultas y me surgía esa duda de como concatenar dependiendo de que BBDD usaba.

Ahora queda claro.
El + para Sumar en Oracle y MySQL
El || para concatenar en Oracle y MySQL
El + concatena si ambos campos son tipo string en SQL
Si son diferente tipo (int y string) debemos convertir el int a string y luego concatenar en SQL.

Con este post me quedo todo claro un Saludo.