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

CONCAT_WS () dành cho SQL Server

Chúng ta có thể sử dụng một số thủ thuật:

  • Để bỏ qua NULL giá trị: COALESCE ()
  • Để tránh dấu phân tách theo sau:hãy thêm nó vào trước mỗi mục, xóa dấu đầu tiên sau đó với ví dụ: STUFF ()

Anh ấy là một ví dụ làm việc :

CREATE TABLE foo (
  id INT IDENTITY(1, 1) NOT NULL,
  a VARCHAR(50),
  b VARCHAR(50),
  c VARCHAR(50),
  d VARCHAR(50),
  PRIMARY KEY (id)
);

INSERT INTO foo (a, b, c, d) VALUES ('a', 'b', 'c', 'd');
INSERT INTO foo (a, b, c, d) VALUES (NULL, 'b', NULL, 'd');
INSERT INTO foo (a, b, c, d) VALUES ('a', NULL, NULL, 'd');
INSERT INTO foo (a, b, c, d) VALUES (NULL, NULL, NULL, NULL);
SELECT id,
STUFF(
    COALESCE('; ' + a, '') +
    COALESCE('; ' + b, '') +
    COALESCE('; ' + c, '') +
    COALESCE('; ' + d, ''),
1, 2, '') AS bar
FROM foo
ORDER BY id
| ID | BAR        |
|----|------------|
|  1 | a; b; c; d |
|  2 | b; d       |
|  3 | a; d       |
|  4 | (null)     |

Mục đích của STUFF(..., 1, 2, '') là xóa dấu phân tách ban đầu (2 là độ dài dấu phân cách trong trường hợp của chúng tôi).

Điều này sẽ hoạt động trên SQL Server 2005 (và có thể là các phiên bản trước đó).

Lưu ý:không giống như CONCAT_WS() ban đầu , phiên bản của chúng tôi trả về NULL khi tất cả các mục là NULL . Thực lòng tôi nghĩ đó là một lựa chọn tốt hơn nhưng dù sao thì cũng nên dễ dàng thay đổi.



  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âu lệnh CASE trong mệnh đề WHERE trong SQL Server 2008

  2. Sử dụng biểu thức CASE trong SQL Server

  3. lưu trữ tiếng Ả Rập trong cơ sở dữ liệu SQL

  4. Tạo một cột được tính toán trong SQL Server bằng T-SQL

  5. Sử dụng DMV (Chế độ xem quản lý động) và DMF (Chức năng quản lý động) | Khắc phục sự cố hiệu suất máy chủ SQL -4