如何在SQL Server上使用月份名称替换select中的标题

nr7wwzry  于 2023-01-04  发布在  SQL Server
关注(0)|答案(1)|浏览(140)

我有一个包含以下列的表:
ID、策略编号、第1个月、第2个月、当前月份。
数据通过SP更新,为了在报告中显示正确的月份,我必须修改标题,将其更改为月份的特定名称,例如:将"当前月份"更改为"一月",将"月份2"更改为"十二月",将"月份3"更改为"十一月"。
我尝试了以下方法:

declare @currentMonth varchar(20) = DATENAME(month, GETDATE());
declare @month2 varchar(20) = DATENAME (month, dateAdd(month, -1, GETDATE()));
declare @month3 varchar(20) = DATENAME (month, dateAdd(month, -2, GETDATE()));

select id, policy_num, month1 as [@currentMonth], month2 as [@month2], month3 as [@month3] from fact_report;`

但是它不起作用,如果我打印每个变量的值,它会正确地显示月份,但是当我运行选择查询时,它不会在标题上显示数据。
我能做什么?是不是少了什么石膏?
谢谢你的帮助。

t2a7ltrp

t2a7ltrp1#

遗憾的是,您需要使用动态SQL或通过调用代码或报告工具设置列名:

declare @currentMonth varchar(20) = DATENAME(month, GETDATE());
declare @month2 varchar(20) = DATENAME (month, dateAdd(month, -1, GETDATE()));
declare @month3 varchar(20) = DATENAME (month, dateAdd(month, -2, GETDATE()));

declare @sql varchar(150) = 'select id, policy_num, month1 as [' + @currentMonth + '], month2 as [' + @month2 + '], month3 as [' + @month3 + '] from fact_report;';

exec(@sql)

好消息是,这是相当安全的,因为动态SQL去。有注入问题,一些必须已经有管理员访问您的服务器,以改变系统的月份名称。

相关问题