如何在SQL Server Management Studio (SSMS)中合并列?附环境与表结构
合并SQL Server表中列的几种实用方法
嘿,针对你在SSMS v17.3里操作SQL Server 2014(版本12.0.2269.0)时,想要合并flow1表中Book、Ch、V列的需求,我给你整理了几种好用的实现方式:
1. 用+运算符手动拼接(兼容全版本SQL Server)
这种方法需要手动处理两个关键点:数值类型转字符串、NULL值兜底(因为只要有一个值是NULL,整个拼接结果会直接变成NULL)。我们可以用ISNULL把NULL替换为空字符串,用CAST把INT类型的Ch和V转成字符串:
SELECT Id, A, B, -- 拼接为「书籍名称 章节-节」的格式 ISNULL(Book, '') + ' ' + ISNULL(CAST(Ch AS VARCHAR(10)), '') + '-' + ISNULL(CAST(V AS VARCHAR(10)), '') AS BookChapterSection FROM dbo.flow1;
2. 用CONCAT函数(SQL Server 2012+推荐)
CONCAT是微软在SQL Server 2012之后推出的便捷函数,它会自动帮你搞定两个麻烦事:
- 自动把数值类型(比如
Ch、V的INT)转换成字符串,不用手动写CAST - 遇到NULL值直接当成空字符串处理,不会让整个拼接结果失效
用法特别简洁:
SELECT Id, A, B, CONCAT(Book, ' ', Ch, '-', V) AS BookChapterSection FROM dbo.flow1;
3. 自定义格式(比如章节号补零对齐)
如果你的章节/节号需要统一格式(比如个位数补零,变成03-44而不是3-44),可以用FORMAT函数配合CONCAT实现:
SELECT Id, A, B, CONCAT(Book, ' ', FORMAT(Ch, '00'), '-', FORMAT(V, '00')) AS BookChapterSection FROM dbo.flow1;
4. 添加永久计算列(长期使用拼接结果的首选)
要是你不想每次查询都写拼接逻辑,可以给表加一个计算列,SQL Server会自动维护这个列的数值:
-- 添加持久化计算列(PERSISTED表示值会存在磁盘上,查询速度更快) ALTER TABLE dbo.flow1 ADD BookChapterSection AS CONCAT(Book, ' ', Ch, '-', V) PERSISTED;
之后直接查询BookChapterSection列就能拿到拼接好的结果啦!
内容的提问来源于stack exchange,提问作者barlop
相关产品推荐
相关产品推荐

