PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để nối các cột trong một Postgres SELECT?

Với các cột kiểu chuỗi như character(2) (như bạn đã đề cập ở phần sau), nối được hiển thị chỉ hoạt động bởi vì, trích dẫn hướng dẫn sử dụng:

[...] toán tử nối chuỗi (|| ) chấp nhận đầu vào không phải chuỗi, miễn là ít nhất một đầu vào thuộc loại chuỗi , như thể hiện trong Bảng 9.8. Đối với các trường hợp khác, hãy chèn một sự ép buộc rõ ràng vào text [...]

Tôi nhấn mạnh đậm. Ví dụ thứ 2 (select a||', '||b from foo ) hoạt động cho bất kỳ kiểu dữ liệu kể từ chuỗi không định kiểu, chữ ', ' mặc định nhập text làm cho toàn bộ biểu thức hợp lệ trong mọi trường hợp.

Đối với các kiểu dữ liệu không phải chuỗi, bạn có thể "sửa chữa" câu lệnh đầu tiên bằng cách truyền ít nhất một đối số thành text . ( Bất kỳ loại có thể được chuyển thành text ):

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

Đánh giá từ câu trả lời của riêng bạn, " không hoạt động "được cho là có nghĩa là" trả về NULL ". Kết quả của bất cứ điều gì nối với NULL là NULL. Nếu KHÔNG ĐỦ các giá trị có thể tham gia và kết quả không được NULL, hãy sử dụng concat_ws() để nối bất kỳ số lượng giá trị nào (Postgres 9.1 trở lên):

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

Dấu phân tách chỉ được thêm vào giữa các giá trị không rỗng, tức là chỉ khi cần thiết.

Hoặc concat() nếu bạn không cần dấu phân cách:

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

Ở đây không cần loại phôi vì cả hai hàm đều lấy "any" nhập và làm việc với các biểu diễn văn bản.

Thêm chi tiết (và lý do tại sao COALESCE là một chất thay thế kém) trong câu trả lời có liên quan này:

  • Kết hợp hai cột và thêm vào một cột mới

Về cập nhật trong nhận xét

+ không phải là một toán tử hợp lệ để nối chuỗi trong Postgres (hoặc SQL tiêu chuẩn). Đó là ý tưởng riêng của Microsoft khi thêm điều này vào các sản phẩm của họ.

Hầu như không có bất kỳ lý do chính đáng nào để sử dụng character(n) (từ đồng nghĩa: char(n) ). Sử dụng text hoặc varchar . Chi tiết:

  • Bất kỳ nhược điểm nào của việc sử dụng kiểu dữ liệu "văn bản" để lưu trữ chuỗi?
  • Cách tốt nhất để kiểm tra "giá trị trống hoặc rỗng"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. '$$' được sử dụng để làm gì trong PL / pgSQL

  2. Theo dõi tính khả dụng cao cho PostgreSQL với Heartbeat

  3. Cách current_time hoạt động trong PostgreSQL

  4. Cách trả lại id trên Phụ trang với Ibatis (với từ khóa QUAY LẠI)

  5. Có nhà điều hành postgres CLOSEST không?