Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

CONCAT_WS() untuk SQL Server

Kita dapat menggunakan beberapa trik:

  • Untuk melewati NULL nilai:COALESCE()
  • Untuk menghindari pemisah yang tertinggal:tambahkan sebelum setiap item, hapus yang pertama setelahnya dengan mis. STUFF()

Dia adalah contoh kerja :

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)     |

Tujuan STUFF(..., 1, 2, '') adalah menghapus pemisah awal (2 adalah panjang pemisah dalam kasus kami).

Ini harus bekerja pada SQL Server 2005 (dan mungkin versi sebelumnya).

Catatan:tidak seperti CONCAT_WS() asli , versi kami mengembalikan NULL ketika semua item NULL . Sejujurnya saya pikir ini adalah pilihan yang lebih baik tetapi bagaimanapun juga seharusnya mudah untuk diubah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa keuntungan dari VistaDB

  2. Apa batasan SQL Server Compact? (Atau - bagaimana cara memilih database untuk digunakan pada platform MS?)

  3. SQL Server v.Berikutnya :Performa STRING_AGG()

  4. Bagaimana Saya Membagi String yang Dibatasi di SQL Server Tanpa Membuat Fungsi?

  5. SQL Server ORDER BY tanggal dan nol terakhir