我有一个表,每个月有12列。列名如Jan,Feb,Mar,Apr等。现在我想写一个查询,我将在其中传递日期或月份,作为回报,它应该只显示获得该月份列。
答案 0 :(得分:0)
试试这个:
DECLARE @CurrentMonth VARCHAR(12) = 'Januari';
DECLARE @DynamicTSQLStatement NVARCHAR(MAX) = N'SELECT [' + @CurrentMonth + '] FROM [dbo].[Mytable];';
exec sp_executesql @DynamicTSQLStatement
您需要使用动态T-SQL语句。注意,如果要将它包装在例程中,则它应该是存储过程,因为您无法在函数中执行dynamic T-SQL
(例如,除了使用SQL CLR之外)。
答案 1 :(得分:0)
DECLARE @CurrentMonth VARCHAR(30) = '2017-11-10 11:57:18.970';
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
SET @DynamicTSQLStatement=N'SELECT [' +
CASE WHEN isdate(@CurrentMonth)=1 then DATENAME(MONTH,@CurrentMonth)
ELSE @CurrentMonth END + '] FROM [dbo].[Mytable];';
exec sp_executesql @DynamicTSQLStatement