Saya memiliki dua kolom string a
dan b
dalam sebuah tabel foo
.
select a, b from foo
mengembalikan nilai a
dan b
. Namun, rangkaian a
dan b
tidak bekerja. Saya mencoba :
select a || b from foo
dan
select a||', '||b from foo
Pembaruan dari komentar: kedua kolom adalah tipe character(2)
.
text
tipe lain ?concatenate
saya ragu dia berurusan dengan tipe numerik, meskipun PostgreSQL juga akan menangani beberapa dari mereka. Lihat di sini: postgresql.org/docs/9.1/static/functions-string.htmlJawaban:
Dengan kolom tipe string seperti
character(2)
(seperti yang Anda sebutkan nanti), rangkaian yang ditampilkan hanya berfungsi karena, mengutip manual:Penekanan berani saya. Contoh ke-2 (
select a||', '||b from foo
) berfungsi untuk semua tipe data karena string literal yang tidak diketik', '
default untuk mengetiktext
membuat seluruh ekspresi valid dalam kasus apa pun.Untuk tipe data non-string, Anda dapat "memperbaiki" pernyataan pertama dengan melemparkan setidaknya satu argumen
text
. ( Semua jenis dapat dilemparkan ketext
):Menilai dari jawaban Anda sendiri , " tidak berfungsi " seharusnya berarti " mengembalikan NULL ". Hasil dari apa pun yang digabungkan ke NULL adalah NULL. Jika nilai NULL dapat terlibat dan hasilnya tidak boleh NULL, gunakan
concat_ws()
untuk menggabungkan sejumlah nilai (Postgres 9.1 atau lebih baru):Atau
concat()
jika Anda tidak membutuhkan pemisah:Tidak perlu mengetikkan cor di sini karena kedua fungsi mengambil
"any"
input dan bekerja dengan representasi teks.Detail lebih lanjut (dan mengapa
COALESCE
pengganti yang buruk) dalam jawaban terkait ini:Mengenai pembaruan dalam komentar
+
bukan operator yang valid untuk penggabungan string dalam Postgres (atau SQL standar). Ini adalah ide pribadi Microsoft untuk menambahkan ini ke produk mereka.Nyaris tidak ada alasan untuk menggunakan
(sinonim:)character(n)
. Gunakanchar(n)
text
atauvarchar
. Detail:sumber
Postgres 9.1 or later
, kan? Anda seharusnya sudah menyediakan versi Postgres Anda, dalam pertanyaan . Harap perbarui pertanyaan Anda dengan semua informasi yang diminta, sebelum Anda kembali untuk hal lain.SELECT concat(a, b) FROM foo;
bekerja untuk saya di Postgres 9.3 kapana
danb
sedangVARCHAR
.Masalahnya adalah dalam nilai nulls; maka Rangkaian tidak bekerja dengan nol. Solusinya adalah sebagai berikut:
sumber
lebih baik menggunakan fungsi CONCAT di PostgreSQL untuk penggabungan
misalnya:
select CONCAT(first_name,last_name) from person where pid = 136
jika Anda menggunakan column_a || '' || column_b untuk gabungan 2 kolom, jika salah satu nilai dalam column_a atau column_b adalah null query akan mengembalikan nilai nol. yang mungkin tidak disukai dalam semua kasus .. jadi alih-alih ini
menggunakan
itu akan mengembalikan nilai yang relevan jika salah satu dari mereka memiliki nilai
sumber
Fungsi CONCAT terkadang tidak berfungsi dengan versi postgreSQL yang lebih lama
lihat apa yang saya gunakan untuk menyelesaikan masalah tanpa menggunakan CONCAT
Atau bisa juga Anda gunakan
dalam kasus kedua saya menggunakan tanda kutip ganda untuk first_name dan last_name
Semoga ini bermanfaat, terima kasih
sumber
Karena saya juga terjebak dalam hal ini, saya pikir saya harus membagikan solusi yang paling cocok untuk saya. Saya juga berpikir bahwa ini jauh lebih sederhana.
Jika Anda menggunakan nama tabel Huruf besar.
Jika Anda menggunakan nama tabel huruf kecil
Itu dia!. Karena PGSQL menghitung Kutipan Ganda untuk deklarasi kolom dan Kutipan Tunggal untuk string, ini berfungsi seperti pesona.
sumber
Kerangka kerja Laravel PHP, saya menggunakan search first_name, Last_name Fields anggap seperti Pencarian Nama Lengkap
Pesona ini bekerja !!!
sumber
Coba ini
sumber
concat_ws(' ', FirstName, LastName)
akan jauh lebih bersih.Misalnya jika ada tabel karyawan yang terdiri dari kolom sebagai:
jika kita ingin menyatukan
f_name + l_name
sebagainame
.sumber