2011-12-17 41 views
17

Tôi đang chuyển từ MySQL sang SQL Server 2008 Express và dường như không thể tìm thấy hàm CONCAT() - esque. Tôi có hai cột tôi đang cố gắng kết hợp thành một chuỗi và tìm các kết hợp độc đáo.SQL Server 2008 Express CONCAT() không tồn tại?

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

Khi tôi thử như sau:

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

tôi nhận được thông báo lỗi sau:

Msg 195, Level 15, State 10, Line 1
'concat' là không phải là tên hàm được tích hợp được công nhận.

Mọi đề xuất?

+1

[phiên bản tiếp theo sẽ có một 'chức năng CONCAT'] (http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/concat-function-in-sql-server) –

+1

Nó có lẽ đáng chú ý rằng 'concat' trong MySQL [trả về' null' khi bất kỳ đối số nào là 'null'] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat) , trong khi tìm kiếm MS SQL 'concat' [chuyển đổi null thành chuỗi rỗng] (http://msdn.microsoft.com/en-us/library/hh231515.aspx) trước khi ghép nối và không bao giờ trả về' null', vì vậy thậm chí mặc dù chúng tôi có nó ngay bây giờ, nó có thể không được sử dụng cho mục tiêu của OP là chuyển MySQL sang MSSQL. – GSerg

Trả lời

34

Có lẽ một cái gì đó như thế nào,

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

sẽ có việc làm?

+0

Đừng nghĩ vậy. Có các chồng chéo trong id1 và id2. Tôi cần chuỗi kết hợp là duy nhất, không chỉ id1. – screechOwl

+7

@screechOwl: Những gì Bassam đề xuất chỉ là một sự thay thế cho 'CONCAT()'. Nó cũng giống như vậy: '+' có nghĩa là nối trong T-SQL khi các toán hạng là các chuỗi. –

+0

Tôi đang tra cứu CONCAT và dường như nó không phát hiện được tính duy nhất trên chính nó .. trong dữ liệu mẫu của bạn, hãy đưa ra một số ví dụ về đầu vào không độc nhất của bạn, và những gì bạn cần bạn ra –

27

Bạn có thể sử dụng CONCAT trong SQL 2008 (nếu bạn thực sự muốn) bằng cách gói trong ngoặc

{fn CONCAT(id1,id2)} AS combo1 

LƯU Ý: CONCAT chỉ mất hai đối số, vì vậy bạn phải tổ họ nếu bạn muốn nối nhiều hơn hai chuỗi :

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

người dùng, cảm ơn bạn đã thực sự trả lời câu hỏi. – Stanton

+0

Tính năng này hoạt động. Nhưng nó có nghĩa là gì? Và làm thế nào nó ảnh hưởng đến một phiên bản 2012, nếu được sử dụng như thế này? – Calin

+0

Đó là cú pháp ODBC thêm thông tin [ở đây] (http://msdn.microsoft.com/en-us/library/0fasyf1c%28v=vs.71%29.aspx), tôi không chắc chắn vào năm 2012. – user2054797

4

CONCAT không tồn tại trong SQL server 2008, nó là mới kể từ SQL server 2012.

Bạn có thể sử dụng thay vì:

select id1, id2, id1 + ", " + id2 as combo1 
FROM db1 
group by combo1 
Các vấn đề liên quan