SQL— CONCAT(字符串连接函数)

有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的:

  • MySQL: CONCAT()
  • Oracle: CONCAT(), ||
  • SQL Server: +

CONCAT() 的语法如下:

CONCAT(字串1, 字串2, 字串3,...): 将字串1、字串2、字串3,等字串连在一起。

请注意,Oracle的CONCAT()只允许两个参数;

换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。

来看几个例子。假设我们有以下的表格:

Geography 表格

region_namestore_name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego

例子1:

MySQL/Oracle:
SELECT CONCAT(region_name,store_name)FROM Geography
WHERE store_name = 'Boston';

结果

'EastBoston'

例子2:

Oracle:
SELECT region_name || ' ' ||store_name FROM Geography
WHERE store_name = 'Boston';

结果

'East Boston'

例子3:

SQL Server:
SELECT region_name + ' ' + store_nameFROM Geography
WHERE store_name = 'Boston';

结果

'East Boston'

分享:
SQL Server 中,字符串连接是数据库操作中常见的需求之一,用于将多个字符串值合并为一个连续的字符串SQL Server 提供了多种方式来实现字符串连接,包括使用 `+` 运算符、`CONCAT` 函数以及结合 `FOR XML PATH` 方法进行聚合连接。 ### 使用 `+` 运算符 `+` 运算符是最基本的字符串连接方式,适用于少量字符串的拼接。需要注意的是,如果任意一个操作数为 `NULL`,结果也会为 `NULL`。为了避免这种情况,可以使用 `ISNULL` 或 `COALESCE` 函数来处理空值。 示例: ```sql SELECT 'Hello' + ' ' + 'World' AS Result; -- 输出: Hello World ``` ### 使用 `CONCAT` 函数 `CONCAT` 是 SQL Server 2012 及更高版本中引入的内置函数,专门用于字符串连接。它会自动将 `NULL` 值转换为空字符串,因此即使某些字段为 `NULL`,也不会影响整体拼接结果。 示例: ```sql SELECT CONCAT('Hello', ' ', 'World') AS Result; -- 输出: Hello World ``` ### 使用 `FOR XML PATH` 方法进行多行聚合连接 当需要将多行数据中的字符串值合并为一个字段时,可以使用 `FOR XML PATH` 方法。这种方法特别适用于需要对一组数据进行字符串拼接的场景。 示例: 假设有一个表 `Employees`,包含字段 `Name`,要将所有员工姓名拼接成一个字符串: ```sql SELECT STUFF(( SELECT ',' + Name FROM Employees FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS ConcatenatedNames; -- 输出: Name1,Name2,Name3... ``` ### 使用 `STRING_AGG` 函数SQL Server 2017 及更高版本) 从 SQL Server 2017 开始,引入了 `STRING_AGG` 函数,用于简化多行字符串聚合操作。该函数支持指定分隔符,并且语法更加直观。 示例: ```sql SELECT STRING_AGG(Name, ', ') AS ConcatenatedNames FROM Employees; -- 输出: Name1, Name2, Name3... ``` ### 注意事项 - `CONCAT` 和 `STRING_AGG` 是更现代的函数,推荐在支持的 SQL Server 版本中使用。 - 在使用 `+` 运算符时,需要特别注意 `NULL` 值的影响,建议结合 `ISNULL` 或 `COALESCE` 使用。 - `STRING_AGG` 是目前最简洁且功能强大的字符串聚合函数,适用于需要处理多行数据拼接的场景[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值