Saya sedang mencari CONCAT
fungsi 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 CONCAT
fungsi tersebut ada di SQL Server 2008 R2?
Jika tidak, bagaimana cara menggabungkan string di SQL Server 2008 R2?
sql-server
sql-server-2008
tsql
Mitesh Budhabhatti
sumber
sumber
CONCAT
ini baru untuk tahun 2012.Jawaban:
CONCAT
baru 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:
EDIT Martin Smith dengan senang hati menunjukkan bahwa SQL Server menyediakan implementasi
CONCAT
fungsi ODBC .sumber
SELECT {fn concat ('foo', 'bar')};
di versi sebelumnya. Hanya menerima 2 parameter.+
operator, seperti yang disebutkan @ lynn-langit dalam jawabannya, yang pada awalnya saya benar-benar terlewat karena saya hanya membaca jawaban yang diterima ...+
berperilaku berbeda, hasil untukSELECT 'A' + 'B' + 'C'
vsSELECT CONCAT('A', 'B', 'C')
vsSELECT 'A' + 'B' + NULL
vsSELECT CONCAT('A', 'B', NULL)
adalahABC
,ABC
,NULL
,AB
NULL
, jadi+
bekerja dengan baik :)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 .
sumber
Saya sarankan Anda memasukkan semua kolom sebelum menggabungkannya
Ini seharusnya berhasil untuk Anda.
sumber
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
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
sumber
SELECT 'varchar(' + 5 + ')'
muncul kesalahan "Konversi gagal saat mengonversi nilai nvarchar 'varchar (' ke tipe data int", jadi saya kira jawaban Anda tidak berlaku.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
NULL
ke''
(string kosong) casting untuk amanNULL
penanganan 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
varchar
ukuran default di sini yang diperbaiki olehvarchar(MAX)
.sumber
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
sumber
Ya, fungsinya tidak di sql 2008. Anda dapat menggunakan operasi cast untuk melakukan itu.
Misalnya kami memiliki
employee
tabel dan Anda inginname
denganapplydate
.agar bisa Anda gunakan
Ini akan berfungsi di mana fungsi concat tidak berfungsi.
sumber