加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

用于SQL Server的CONCAT_WS()

发布时间:2020-12-12 06:47:20 所属栏目:MsSql教程 来源:网络整理
导读:如何在SQL Server中模拟 MySQL的 CONCAT_WS()功能? 此函数类似于 CONCAT() function in SQL Server 2012,只是它在非NULL项之间添加了一个分隔符: SELECT id,CONCAT_WS('; ',a,b,c,d) AS barFROM fooORDER BY id; | ID | BAR ||----|------------|| 1 | a; b
如何在SQL Server中模拟 MySQL的 CONCAT_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.老实说,我认为这是一个更好的选择,但无论如何都应该很容易改变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读