2011-12-17 38 views
17

Estoy haciendo el cambio de MySQL a SQL Server 2008 Express y parece que no puedo encontrar una función CONCAT() - esque. Tengo dos columnas que estoy tratando de combinar en una cadena y encontrar combinaciones únicas.SQL Server 2008 Express CONCAT() no existe?

id1   id2 
001   abc1 
002   qrs5 
003   qrs5 
003   abc1 
...   ... 

Cuando intente lo siguiente:

select id1, id2, concat(id1, ", ", id2) as combo1 
    FROM db1 
    group by combo1 

me sale el siguiente mensaje de error:

Msg 195, nivel 15, estado 10, línea 1
'concat' es no es un nombre de función incorporado reconocido.

¿Alguna sugerencia?

+1

[versión siguiente tendrá una función 'CONCAT'] (http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/concat-function-in-sql-server) –

+1

Se Vale la pena señalar que 'concat' en MySQL [devuelve' null' cuando cualquier argumento es 'nulo'] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat) , mientras que el codificado MS SQL 'concat' [convierte nulls a cadenas vacías] (http://msdn.microsoft.com/en-us/library/hh231515.aspx) antes de la concatenación y nunca devuelve' null', por lo que incluso aunque ahora lo tenemos, no se puede utilizar para el objetivo del OP de portar MySQL a MSSQL. – GSerg

Respuesta

34

Tal vez algo como,

SELECT DISTINCT id1, id2, id1 + ', ' + id2 

funcionaría eso?

+0

No lo creo. Hay superposiciones en id1 e id2. Necesito que la cadena combinada sea única, no solo id1. – screechOwl

+7

@screechOwl: Lo que Bassam sugiere es simplemente un reemplazo para 'CONCAT()'. Hace lo mismo: '+' significa concatenación en T-SQL cuando los operandos son cadenas. –

+0

Estoy buscando CONCAT y no parece estar detectando la singularidad por sí mismo. En sus datos de muestra ponga un ejemplo de lo que su entrada no única podría ser, y lo que necesita es que el resultado sea tal vez podamos ayudarlo fuera –

27

Puede utilizar CONCAT en SQL 2008 (si realmente quieres) envolviendo entre paréntesis

{fn CONCAT(id1,id2)} AS combo1 

NOTA: CONCAT sólo toma dos argumentos, por lo que debe anidar ellos si lo desea concatenar más de dos cuerdas :

{fn CONCAT(id1,{fn CONCAT(id2,id3)})} AS combo2 
+2

usuario, gracias por responder la pregunta. – Stanton

+0

Esto funciona. Pero, ¿qué significa realmente? ¿Y cómo afecta una versión 2012, si se usa así? – Calin

+0

Es la sintaxis ODBC más información [aquí] (http://msdn.microsoft.com/en-us/library/0fasyf1c%28v=vs.71%29.aspx), no estoy seguro de 2012. – user2054797

4

CONCAT no existe en SQL Server 2008, es nueva ya que SQL Server 2012.

Usted podría utilizar en su lugar:

select id1, id2, id1 + ", " + id2 as combo1 
FROM db1 
group by combo1 
Cuestiones relacionadas