Bagaimana cara menggunakan fungsi CONCAT di SQL Server 2008 R2?

102

Saya sedang mencari CONCATfungsi di SQL Server 2008 R2. Saya menemukan tautan untuk fungsi ini . Tetapi ketika saya menggunakan fungsi ini, itu memberikan kesalahan berikut:

Msg 195, Level 15, State 10, Line 7
'CONCAT' bukan nama fungsi bawaan yang dikenali.

Apakah CONCATfungsi tersebut ada di SQL Server 2008 R2?

Jika tidak, bagaimana cara menggabungkan string di SQL Server 2008 R2?

Mitesh Budhabhatti
sumber
@Oded Saya hanya mencoba untuk mengeksekusi stmt - pilih concat ('b', 'a')
Mitesh Budhabhatti
1
@marc_s: Dokumentasi memang memiliki beberapa indikasi bahwa itu untuk SQL Server 2012, tetapi tidak ada indikasi bahwa CONCATini baru untuk tahun 2012.
Gabe
1
Ini secara tidak langsung menunjukkan bahwa ini untuk tahun 2012, tetapi halaman tersebut memiliki desain UI yang buruk. Pada halaman di mana suatu fungsi IS tersedia di versi yang lebih lama, terdapat menu drop-down tepat di samping versi dokumen yang Anda baca. Jika Anda mengetahui hal ini, maka Anda tahu bahwa ini hanya untuk tahun 2012. Jika Anda tidak mengetahuinya, Anda akan berakhir di situasi yang sama dengan Mitesh.
Yohanes

Jawaban:

70

CONCATbaru di SQL Server 2012. Tautan yang Anda berikan menjelaskan ini, ini bukan fungsi pada Versi Sebelumnya , termasuk 2008 R2.

Itu adalah bagian dari SQL Server 2012 dapat dilihat di pohon dokumen:

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

EDIT Martin Smith dengan senang hati menunjukkan bahwa SQL Server menyediakan implementasi CONCATfungsi ODBC .

ta.speot.is
sumber
26
Anda dapat menggunakan SELECT {fn concat ('foo', 'bar')};di versi sebelumnya. Hanya menerima 2 parameter.
Martin Smith
6
Atau gunakan saja +operator, seperti yang disebutkan @ lynn-langit dalam jawabannya, yang pada awalnya saya benar-benar terlewat karena saya hanya membaca jawaban yang diterima ...
Svish
7
@ Svish +berperilaku berbeda, hasil untuk SELECT 'A' + 'B' + 'C'vs SELECT CONCAT('A', 'B', 'C')vs SELECT 'A' + 'B' + NULLvs SELECT CONCAT('A', 'B', NULL)adalah ABC, ABC, NULL,AB
ta.speot.is
@ ta.speot.is Senang mengetahuinya! Meskipun dalam kasus saya tidak ada kasus NULL, jadi +bekerja dengan baik :)
Svish
Jawaban ini akan jauh lebih berguna jika berisi informasi bahwa Anda harus menggunakan tanda tambah. Komunitas mengkonfirmasi pendapat itu - bandingkan upvote dari jawaban @ LynnLangit :) OP juga bertanya "bagaimana cara menggabungkan string di SQL Server 2008 R2?"
Honza Zidek
101

Hanya untuk kelengkapan - di SQL 2008 Anda akan menggunakan +operator plus untuk melakukan penggabungan string.

Lihat referensi MSDN dengan kode sampel. Dimulai dengan SQL 2012, Anda mungkin ingin menggunakan fungsi CONCAT yang baru .

Lynn Langit
sumber
46

Saya sarankan Anda memasukkan semua kolom sebelum menggabungkannya

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

Ini seharusnya berhasil untuk Anda.

vasin1987
sumber
6
TIPS: Perlu diperhatikan bahwa jika ukuran varchar tidak ditentukan, misalnya varchar (50), maka sql akan menggunakan default 30. Jika variabel / nilai yang dilemparkan lebih dari default, itu akan dipotong tanpa menimbulkan kesalahan.
Swifty
23

CONCAT, seperti yang dinyatakan, tidak didukung sebelum SQL Server 2012. Namun Anda dapat menggabungkan hanya menggunakan operator + seperti yang disarankan. Namun berhati-hatilah, operator ini akan memberikan error jika operan pertama adalah angka karena dianggap akan menambah dan bukan menggabungkan. Untuk mengatasi masalah ini cukup tambahkan '' di depan. Sebagai contoh

someNumber + 'someString' + .... + lastVariableToConcatenate

akan memunculkan kesalahan TAPI '' + someNumber + 'someString' + ......akan berfungsi dengan baik.

Selain itu, jika ada dua angka yang akan digabungkan, pastikan Anda menambahkan '' di antara keduanya, seperti itu

.... + someNumber + '' + someOtherNumber + .....
kuklei
sumber
Terima kasih, menggunakan '' + f.columnName + '' dalam daftar kolom bekerja dengan baik!
Lukas
2
@kuklei Di server SQL saya, SELECT 'varchar(' + 5 + ')'muncul kesalahan "Konversi gagal saat mengonversi nilai nvarchar 'varchar (' ke tipe data int", jadi saya kira jawaban Anda tidak berlaku.
Alexander
5

NULL safe drop dalam perkiraan pengganti untuk fungsi SQL Server 2012 CONCAT

SQL Server 2012 :

SELECT CONCAT(data1, data2)

PRE SQL 2012 (Dua Solusi) :

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

Kedua solusi ini menyusun beberapa jawaban dan peringatan luar biasa yang diajukan oleh poster lain termasuk @Martin Smith, @Svish, dan @ vasin1987.

Opsi ini menambahkan NULLke ''(string kosong) casting untuk aman NULLpenanganan sementara akuntansi untuk perilaku yang berbeda-beda dari +operator yang berkaitan dengan operan tertentu.

Perhatikan bahwa solusi ODBC Scaler Function dibatasi hingga 2 argumen sedangkan pendekatan +operator dapat diskalakan ke banyak argumen sesuai kebutuhan.

Perhatikan juga potensi masalah yang diidentifikasi oleh @Swifty terkait varcharukuran default di sini yang diperbaiki oleh varchar(MAX).

Troy Sheaffer
sumber
3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

Transmisikan atau konversi hanya jika jenis bidang berbeda dari yang lain.

Saat memasukkan nilai harus berada di tempat yang benar, Anda perlu memasukkannya. Menggunakan "sebagai" akan menghasilkan kesalahan.

yaitu

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))
Antonio Perez
sumber
2

Ya, fungsinya tidak di sql 2008. Anda dapat menggunakan operasi cast untuk melakukan itu.

Misalnya kami memiliki employeetabel dan Anda ingin namedengan applydate.

agar bisa Anda gunakan

Select   cast(name as varchar) + cast(applydate as varchar) from employee

Ini akan berfungsi di mana fungsi concat tidak berfungsi.

M Faisal SE
sumber