Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

CONCAT_WS() за SQL Server

Можем да използваме няколко трика:

  • За да пропуснете NULL стойности:COALESCE()
  • За да избегнете завършващ разделител:добавете го преди всеки елемент, премахнете първия след това с напр. STUFF()

Той е работещ пример :

СЪЗДАВАНЕ НА ТАБЛИЦА foo ( id INT IDENTITY(1, 1) НЕ NULL, a VARCHAR(50), b VARCHAR(50), c VARCHAR(50), d VARCHAR(50), ПЪРВИЧЕН КЛЮЧ (id) );ВМЪКНЕТЕ В foo (a, b, c, d) СТОЙНОСТИ ('a', 'b', 'c', 'd');INSERT INTO foo (a, b, c, d) СТОЙНОСТИ (NULL, ' b', NULL, 'd');INSERT INTO foo (a, b, c, d) СТОЙНОСТИ ('a', NULL, NULL, 'd'); INSERT INTO foo (a, b, c, d) СТОЙНОСТИ (NULL, NULL, NULL, NULL); 
ИЗБЕРЕТЕ идентификатор,STUFF( COALESCE('; ' + a, '') + COALESCE('; ' + b, '') + COALESCE('; ' + c, '') + COALESCE('; ' + d, ''),1, 2, '') КАТО barFROM fooORDER BY id 
<предварителен код>| ID | БАР ||----|------------|| 1 | а; b; ° С; г || 2 | b; г || 3 | а; г || 4 | (нула) |

Целта на STUFF(..., 1, 2, '') е да премахнете първоначалния разделител (2 е дължината на разделителя в нашия случай).

Това трябва да работи на SQL Server 2005 (и вероятно по-ранни версии).

Забележка:за разлика от оригиналния CONCAT_WS() , нашата версия връща NULL когато всички елементи са NULL . Честно казано мисля, че е по-добър избор, но така или иначе трябва да е лесно да се промени.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 начина за връщане на редове, които съдържат малки букви в SQL Server

  2. Въведение в идентичността на SQL Server

  3. Как да използвате ВСИЧКИ логически оператор в SQL Server - SQL Server / TSQL урок, част 126

  4. Променете отместването на часовата зона на стойността на дата и отместване в SQL Server (T-SQL)

  5. Отстраняване на неизправности при предоставяне на променлива памет в SQL Server