You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL SSMS中如何按行拼接非空列并避免生成空行?

SQL Server SSMS中实现列按行拼接(空字段不生成空行)

问题说明

需要将date类型字段a、int类型字段b、varchar类型字段c按行拼接,空字段不生成对应空行,且每条记录之间用空行分隔。此前尝试单独使用CHAR(13)在SSMS 19.0.1中无效。

解决方案

SSMS中正确识别的换行符是回车+换行组合(CHAR(13)+CHAR(10)),单独CHAR(13)无法触发换行显示。同时需要处理空字段,避免生成多余空行,最终用STRING_AGG实现记录间的空行分隔。

核心SQL语句

SELECT 
    STRING_AGG(
        CONCAT(
            -- 处理date类型字段a,转换为标准格式,空值则返回空字符串
            ISNULL(CONVERT(VARCHAR(10), a, 23), ''),
            -- 非空字段后添加换行符
            CASE WHEN a IS NOT NULL THEN CHAR(13)+CHAR(10) ELSE '' END,
            -- 处理int类型字段b,先转字符串再处理空值
            ISNULL(CONVERT(VARCHAR(10), b), ''),
            CASE WHEN b IS NOT NULL THEN CHAR(13)+CHAR(10) ELSE '' END,
            -- 处理varchar类型字段c
            ISNULL(c, '')
        ),
        -- 记录之间添加空行(两个换行符)
        CHAR(13)+CHAR(10)+CHAR(13)+CHAR(10)
    ) AS 拼接结果
FROM 你的表名;

关键细节说明

  1. 字段类型转换:date和int类型必须先转换为varchar,才能参与字符串拼接。CONVERT(VARCHAR(10), a, 23)确保date类型输出YYYY-MM-DD格式。
  2. 空值处理:用ISNULL将空值转为空字符串,配合CASE语句,仅在字段非空时添加换行符,避免空字段生成空行。
  3. SSMS显示设置:查询结果需切换为文本格式(快捷键Ctrl+T),网格格式无法正确渲染换行符。

测试示例

先创建测试表并插入示例数据:

CREATE TABLE TestTable (a DATE, b INT, c VARCHAR(50));
INSERT INTO TestTable VALUES
('2016-03-17', 123, 'John'),
('2018-05-21', NULL, 'Smith'),
('2023-06-05', 451, 'Park');

执行核心SQL语句(将你的表名替换为TestTable),切换到文本格式查看结果,即可得到期望的输出。

内容的提问来源于stack exchange,提问作者user12977453

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:38