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

动态选择SQL中以2020开头的列及逆透视操作方法咨询

SQL原生语法不支持直接用通配符筛选指定前缀的列查询,你需要通过动态SQL拼接列名的方式实现需求,具体操作如下:

操作步骤(以SQL Server为例,其他数据库仅需调整动态SQL语法即可)

  1. 首先拼接所有2020开头的列名为逗号分隔的字符串
DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX)

-- 拼接符合要求的列名,自动添加引号转义
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(COLUMN_NAME) 
                    FROM INFORMATION_SCHEMA.COLUMNS
                    WHERE TABLE_NAME = '替换为你的实际表名'
                      AND COLUMN_NAME LIKE '2020%'
                    FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(MAX)') 
                ,1,1,'')
  1. 仅查询所有2020开头的列:直接拼接SELECT语句执行动态SQL
SET @query = 'SELECT ' + @cols + ' FROM 替换为你的实际表名'
EXEC sp_executesql @query;
  1. 直接完成UNPIVOT转长表需求(一步到位):
SET @query = 'SELECT 你要保留的非日期列名, 日期, 数值
            FROM 
            (
                SELECT 你要保留的非日期列名, ' + @cols + '
                FROM 替换为你的实际表名
            ) 临时表别名
            UNPIVOT
            (
                数值 FOR 日期 IN (' + @cols + ')
            ) 转置后别名'

EXEC sp_executesql @query;

注意事项

  • 代码中所有中文占位符都需要替换为你实际的表名、字段名
  • 所有要转置的2020开头的列存储的数值类型需要保持一致,否则UNPIVOT会报错
  • 注意防范SQL注入风险,不要在外部输入可控的场景下直接使用未做校验的动态SQL逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:39:03