2011-12-17 25 views
17

MySQL'den SQL Server 2008 Express'e geçiş yapıyorum ve bir CONCAT() - esque işlevi bulamıyorum. Bir dize birleştirmeye ve benzersiz kombinasyonlar bulmaya çalışıyorum iki sütun var.SQL Server 2008 Express CONCAT() mevcut değil mi?

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

aşağıdaki çalıştığınızda:

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

aşağıdaki hata iletisi olsun:

Msg 195, Level 15, State 10, satır 1 'concat' dir
tanınmış yerleşik işlev adı değil.

Herhangi bir öneriniz var mı?

+1

[sonraki versiyon bir 'CONCAT' işlevi olacaktır] (http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/concat-function-in-sql-server) –

+1

It Muhtemelen MySQL'de 'concat' [herhangi bir argüman' null' olduğunda null' döndürür] dikkatini çeker (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat) , aranan MS SQL 'concat' için [boş dizeleri boş dizeleri dönüştürür] (http://msdn.microsoft.com/en-us/library/hh231515.aspx) bir araya getirmeden önce ve asla' null' döndürmez, hatta Şu anda elimizde olsa da, OP'nin MySQL'i MSSQL'e taşıma hedefi için kullanılamayabilir. – GSerg

cevap

34

Belki bir şey gibi

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

olur bu işe?

+0

Düşünme. Id1 ve id2'de örtüşmeler var. Sadece id1 değil, benzersiz olması için birleşik dizeye ihtiyacım var. – screechOwl

+7

@screechOwl: Bassam'ın önerdiği şey sadece CONCAT() 'ın yerini almaktır. Aynı şeyi yapar: '+', işlenenler dizgiler olduğunda T-SQL'de birleştirme anlamına gelir. –

+0

CONCAT'ı arıyorum ve kendi başına benzersizliği algılamıyor gibi görünmüyor. Örnek verilerinizde, benzersiz olmayan girdinizin ne olabileceğine dair bir örnek ve sonuca ulaşmak için neye ihtiyacımız olabilir. –

27

Sen parantez içinde sararak (eğer gerçekten isterseniz) SQL 2008'de CONCAT kullanabilirsiniz

{fn CONCAT(id1,id2)} AS combo1 

NOT: CONCAT sadece iki bağımsız değişkeni alır, ikiden fazla dizeleri bitiştirmek istiyorsanız iç içe onları gerekir böylece :

{fn CONCAT(id1,{fn CONCAT(id2,id3)})} AS combo2 
SQL Server 2008 içinde yok
+2

kullanıcı, soruyu gerçekten yanıtladığınız için teşekkürler. – Stanton

+0

Bu çalışır. Ama aslında ne anlama geliyor? Ve eğer böyle kullanılırsa 2012 versiyonunu nasıl etkiler? – Calin

+0

Bu ODBC sözdizimi daha fazla bilgi [burada] (http://msdn.microsoft.com/en-us/library/0fasyf1c%28v=vs.71%29.aspx), 2012'den emin değilim. – user2054797

4

CONCAT, bu 2012.

bunun yerine kullanabilirsiniz SQL Server beri yenidir:

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