sql >> Database teknologi >  >> RDS >> Sqlserver

CONCAT_WS() til SQL Server

Vi kan bruge et par tricks:

  • For at springe NULL over værdier:COALESCE()
  • For at undgå efterfølgende separator:tilføj det før hvert emne, fjern det første bagefter med f.eks. STUFF()

Han er et fungerende eksempel :

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

Formålet med STUFF(..., 1, 2, '') er at fjerne den oprindelige separator (2 er separatorlængden i vores tilfælde).

Dette burde fungere på SQL Server 2005 (og muligvis tidligere versioner).

Bemærk:i modsætning til den originale CONCAT_WS() , returnerer vores version NULL når alle elementer er NULL . Jeg synes ærligt talt, at det er et bedre valg, men det burde være nemt at ændre alligevel.



  1. SQL Server Database Snapshots -3

  2. Liste over sprog, der understøttes af Oracle Database

  3. Opretter forbindelse til PostgreSQL i IRI Workbench

  4. MySQL 'vælg til opdatering'-adfærd