我想创建3个新列,它们的名字引用一些日期变量,这是不可能像这样写它们。因此,第一列名称应为YEAR2022,第二列名称为YEAR2021,第三列名称为YEAR2020。
你能告诉我怎么写这个吗?
select column1*2 as CONCAT('YEAR',YEAR(DATEADD(YY,0,GETDATE()))),
column1*3 as CONCAT('YEAR',YEAR(DATEADD(YY,-1,GETDATE()))),
column1*4 as CONCAT('YEAR',YEAR(DATEADD(YY,-2,GETDATE()))) FROM table1
我得到的错误是:
'YEAR'附近语法错误。
正如我在评论中提到的,别名不能作为一个表达式,它必须是字面意思。因此,您尝试使用的表达式是不允许的,并且会产生语法错误。
通常,这种排序需求是设计缺陷的标志,或者您试图在SQL层的表示中做一些应该做的事情。我在这里假设是后者。因此,您应该为列使用静态名称,然后在表示层中控制列的名称,以便当它们呈现给最终用户时,它们具有您想要的名称(今天将是YEAR2022
,YEAR2021
和YEAR2020
)。那么你的查询就会像这样:
select column1*2 AS ThisYear,
column1*3 AS YearPrior,
column1*4 AS Year2Prior
FROM dbo.table1;
如何更改表示层中列的名称是完全不同的问题(我们甚至不知道您使用什么语言来编写应用程序)。如果你想问这个问题,我建议你问一个新的问题(只有在你充分研究了这个问题并没有找到解决方案之后),这样我们才能在那方面帮助你。
注意:虽然您可以通过动态SQL实现解决方案,但我强烈建议这里的是错误的解决方案,因此我没有给出答案并提供演示。