PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menggabungkan kolom dalam SELECT Postgres?

Dengan kolom tipe string seperti character(2) (seperti yang Anda sebutkan nanti), rangkaian yang ditampilkan hanya berfungsi karena, mengutip manual:

[...] operator rangkaian string (|| ) menerima input non-string, selama setidaknya satu input bertipe string , seperti yang ditunjukkan pada Tabel 9.8. Untuk kasus lain, masukkan paksaan eksplisit ke text [...]

Penekanan saya yang berani. Contoh ke-2 (select a||', '||b from foo ) bekerja untuk apa saja tipe data sejak string yang tidak diketik literal ', ' default untuk mengetik text membuat seluruh ekspresi valid dalam hal apa pun.

Untuk tipe data non-string, Anda dapat "memperbaiki" pernyataan pertama dengan memberikan setidaknya satu argumen ke text . (Apa saja jenis dapat dilemparkan ke text ):

SELECT a::text || b AS ab FROM foo;

Dilihat dari jawaban Anda sendiri, "tidak berfungsi " seharusnya berarti "mengembalikan NULL ". Hasil dari apa saja digabungkan ke NULL adalah NULL. Jika NULL nilai dapat dilibatkan dan hasilnya tidak boleh NULL, gunakan concat_ws() untuk menggabungkan sejumlah nilai (Postgres 9.1 atau lebih baru):

SELECT concat_ws(', ', a, b) AS ab FROM foo;

Pemisah hanya ditambahkan di antara nilai bukan nol, yaitu hanya jika diperlukan.

Atau concat() jika Anda tidak membutuhkan pemisah:

SELECT concat(a, b) AS ab FROM foo;

Tidak perlu gips tipe di sini karena kedua fungsi mengambil "any" masukan dan bekerja dengan representasi teks.

Detail lebih lanjut (dan mengapa COALESCE adalah pengganti yang buruk) dalam jawaban terkait ini:

  • Gabungkan dua kolom dan tambahkan menjadi satu kolom baru

Mengenai pembaruan di komentar

+ bukan operator yang valid untuk penggabungan string di Postgres (atau SQL standar). Ini adalah ide pribadi Microsoft untuk menambahkan ini ke produk mereka.

Hampir tidak ada alasan bagus untuk menggunakan character(n) (sinonim:char(n) ). Gunakan text atau varchar . Detail:

  • Apakah ada kerugian menggunakan tipe data "teks" untuk menyimpan string?
  • Cara terbaik untuk memeriksa "nilai kosong atau nol"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah PostgreSQL melakukan penggabungan antara dua prosedur tersimpan SQL Server?

  2. Langkah demi Langkah postgres_fdw

  3. Desain database untuk membuat tabel dengan cepat

  4. Penyeimbangan Beban PostgreSQL Menggunakan HAProxy &Keepalive

  5. Bagaimana search_path mempengaruhi resolusi pengenal dan skema saat ini?