Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

CONCAT_WS() pour SQL Server

Nous pouvons utiliser quelques astuces :

Il est un exemple de travail :

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

Le but de STUFF(..., 1, 2, '') est de supprimer le séparateur initial (2 est la longueur du séparateur dans notre cas).

Cela devrait fonctionner sur SQL Server 2005 (et éventuellement des versions antérieures).

Remarque :contrairement à l'original CONCAT_WS() , notre version renvoie NULL lorsque tous les éléments sont NULL . Je pense honnêtement que c'est un meilleur choix, mais ça devrait être facile à changer de toute façon.