SQL Server 的 CONCAT_WS() [英] CONCAT_WS() for SQL Server

查看:17
本文介绍了SQL Server 的 CONCAT_WS()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何模拟 MySQL 的 CONCAT_WS() SQL Server 中的函数?

How can I emulate MySQL's CONCAT_WS() function in SQL Server?

这个函数类似于 CONCAT() 函数在 SQL Server 2012 中,除了它在非 NULL 项目之间添加了一个分隔符:

This function is similar to CONCAT() function in SQL Server 2012 except that it adds a separator between non-NULL items:

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)

推荐答案

我们可以使用一些技巧:

We can use a couple of tricks:

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

他是一个工作示例:

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

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

The purpose of STUFF(..., 1, 2, '') is to remove the initial separator (2 is the separator length in our case).

这应该适用于 SQL Server 2005(可能还有更早的版本).

This should work on SQL Server 2005 (and possibly earlier versions).

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

Note: unlike the original CONCAT_WS(), our version returns NULL when all items are NULL. I honestly think it's a better choice but it should be easy to change anyway.

这篇关于SQL Server 的 CONCAT_WS()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆