gpt4 book ai didi

sql - SQL Server 的 CONCAT_WS()

转载 作者:行者123 更新时间:2023-12-02 09:51:59 25 4
gpt4 key购买 nike

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

此功能类似于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 )

最佳答案

SQL Server 2017 (14.x) 及更高版本有 native CONCAT_WS function .

对于旧版本,我们可以使用一些技巧:

  • 要跳过 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, 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 是我们示例中的分隔符长度)。

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

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

关于sql - SQL Server 的 CONCAT_WS(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com