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 và 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.