动态列名称每年在where子句中更改

时间:2018-11-08 16:24:02

标签: tsql

我正在尝试使网站上的TSQL select语句自动化。每年列名称都会更改,名称末尾的数字值会增加1,因此,我试图手动在where子句中包含动态列名称,而不是手动更新站点。

数据看起来像这样。

+------+------+------+------+------+
| FY18 | FY19 | FY20 | FY21 | FY22 |
+------+------+------+------+------+
|    1 |    0 |    1 |    0 |    1 |
|    1 |    1 |    0 |    1 |    0 |
|    1 |    0 |    0 |    1 |    0 |
+------+------+------+------+------+

到目前为止,这是我要提出的... select语句看起来像这样

  Select distinct
    POS
    from TBL_Staff
    where [' 'FY'+right(year(dateadd(month,3,getdate()))-1,2) '] = 1

我要弄清楚的是,是否有一种方法可以动态生成日期并使SQl将名称+日期识别为列

注意:这是伪造的数据,如果有不清楚的地方,请告诉我

对此表示任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用动态SQL

DECLARE @sql NVARCHAR(MAX) = 'Select distinct
    POS
    from TBL_Staff
    where FY' + CAST(right(year(dateadd(month,3,getdate()))-1,2) AS VARCHAR) + '  = 1'

    exec sp_executesql @sql

@sql是用于动态构造SQL语句的变量。然后,sp_executesql过程执行它。当存在其他替代方法时,请注意不要使用动态sql。如果从用户那里获取输入信息并且您不小心清理输入参数,那么它很难阅读,难以维护并且可能是安全问题。