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

Cách nối chuỗi và giá trị NULL trong SQL Server

Vấn đề:

Bạn muốn nối các NULL với các giá trị chuỗi từ một cột khác trong SQL Server.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên children với dữ liệu trong các cột sau: id (khóa chính), first_name , middle_name last_name .

id first_name middle_name last_name
1 Linda KHÔNG CÓ Jackson
2 Mary Alice Thomson
3 KHÔNG CÓ Steven KHÔNG CÓ
4 KHÔNG CÓ KHÔNG CÓ Màu nâu

Chúng tôi muốn hiển thị tên từ một cột, tên đệm từ cột tiếp theo và họ từ cột cuối cùng dưới dạng một chuỗi, ngay cả khi một trong các cột lưu trữ NULL.

Giải pháp 2:

Chúng tôi sẽ sử dụng CONCAT() hàm số. Đây là truy vấn bạn sẽ viết:

SELECT 
  CONCAT(first_name,  middle_name, last_name) AS name
FROM children;

Đây là kết quả:

name
LindaJackson
MaryAliceThomson
Steven
Màu nâu

Thảo luận:

Sử dụng CONCAT() hàm để nối các giá trị chuỗi từ các biểu thức hoặc cột có chứa NULL. Hàm này nhận một danh sách các chuỗi (hoặc NULL) và hiển thị tất cả các giá trị này trong một chuỗi. Không có dấu phân cách giữa các giá trị, vì vậy kết quả (như trong ví dụ của chúng tôi) có thể không được định dạng như bạn mong đợi. Làm thế nào chúng tôi có thể sửa chữa điều này? Nhìn vào một CONCAT() khác truy vấn:

Giải pháp 2:

Đây là một tùy chọn truy vấn khác:

SELECT 
  CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name
FROM children;

Đây là kết quả:

name
Linda Jackson
Mary Alice Thomson
Steven
Màu nâu

Bây giờ, ngoài các giá trị chuỗi, hàm này cũng có một số khoảng trắng (được đặt giữa các giá trị được nối). Điều này ngăn cách một phần của tên với một phần khác. Nhưng như chúng ta thấy, giải pháp này cũng không phải là lý tưởng; tên đầy đủ không có tên đệm có thêm khoảng trắng, trong khi bản ghi chỉ có một tên thì có thêm hai khoảng trắng.

Trong trường hợp này, CONCAT_WS() chức năng là giải pháp tốt hơn.

Giải pháp 3:

CONCAT_WS() hàm nhận thêm một đối số đầu tiên:một ký tự đóng vai trò là dấu phân cách giữa các chuỗi. Đây là truy vấn:

SELECT 
  CONCAT_WS(' ' , first_name, middle_name, last_name) AS name
FROM children;

Và kết quả:

name
Linda Jackson
Mary Alice Thomson
Steven
Màu nâu

Truy vấn này hiển thị tên đầy đủ của trẻ mà không có bất kỳ khoảng trống nào không cần thiết.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ưu đãi lớn:SQL Server 2016 gói dịch vụ 1

  2. ATAN () Ví dụ trong SQL Server

  3. Làm cách nào để truy xuất số thập phân khi làm tròn số trung bình trong SQL

  4. Chúng ta có thể chuyển các tham số cho một dạng xem trong SQL không?

  5. 5 sự thật hàng đầu để tìm và thay thế văn bản SQL trong SQL Server bằng hàm REPLACE