用于SQL Server的CONCAT_WS()

前端之家收集整理的这篇文章主要介绍了用于SQL Server的CONCAT_WS()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在sql Server中模拟 MySQLCONCAT_WS()功能

函数类似于CONCAT() function in SQL Server 2012,只是它在非NULL项之间添加了一个分隔符:

SELECT id,CONCAT_WS('; ',a,b,c,d) AS bar
FROM foo
ORDER BY id;
| ID | BAR        |
|----|------------|
|  1 | a; b; c; d |
|  2 | b; d       |
|  3 | a; d       |
|  4 |            |

(MySQL Fiddle)

解决方法

我们可以使用几个技巧:

>要跳过NULL值:COALESCE()
>为避免尾随分隔符:在每个项目之前添加它,之后删除第一个项目,例如STUFF()

他是working example

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,d) VALUES ('a','b','c','d');
INSERT INTO foo (a,d) VALUES (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)     |

STUFF(…,”)的目的是删除初始分隔符(在我们的例子中,2是分隔符长度).

这应该适用于sql Server 2005(可能还有早期版本).

注意:与原始CONCAT_WS()不同,当所有项都为NULL时,我们的版本返回NULL.老实说,我认为这是一个更好的选择,但无论如何都应该很容易改变.

原文链接:https://www.f2er.com/mssql/77800.html

猜你在找的MsSQL相关文章