计算日期为列名SQL Server 2008

时间:2016-09-07 13:09:51

标签: sql sql-server sql-server-2008

这里有很多关于将列命名为变量的问题,我不相信这是一个副本,因为我想使用计算。

我想在上个月之后命名我的专栏。我希望这可行:

SELECT isnull(sum(CASE when datepart(mm,rc.datetime) = DATEPART(MONTH, GETDATE()) -1 then 1 else null end),0) AS datename(MM, dateadd(MM, -1, getdate()))

或为了便于阅读:

... AS datename(MM, dateadd(MM, -1, getdate()))

但它没有,我得到一个不正确的语法错误。这可以实现吗?提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试使用动态sql,

DECLARE @sql NVARCHAR(max) = ''

SET @sql = 'SELECT isnull(sum(CASE 
                WHEN datepart(mm, rc.DATETIME) = ' + convert(VARCHAR(10), DATEPART(MONTH, GETDATE())) + ' - 1
                    THEN 1
                ELSE NULL
                END), 0) AS ' + datename(MM, dateadd(MM, - 1, getdate()))

EXEC sp_executesql @sql

答案 1 :(得分:2)

根据评论,只能使用动态sql实现:

var getNewsPerson = function() {
    $.ajax({
        url:"http://website/api/v1/api?pid=" + personId,
        type:"get",
        success:function(res) {
            return_tagname(res);
            processPerson(res);
        }
    });
};

function processPerson(data) {
    var returnedFeedShortcode = return_tagname(data);
    var head = 
        '<div class="headForPerson-nt">' +
            '<div class="hfpm-NextPerson-nt">' +
                '<div class="hfpm-header-nt">' + data[0][0].FirstName + '</div>' +
                '<div class="hfpm-ng-one-nt">' + data[0][0].LastName + '</div>' +
            '</div>' +
            '<div class="hfpm-News-nt">' +
                '<div class="hfpm-header-nt">In the News</div>' + returnedFeedShortcode +
            '</div>' +
        '</div>';
    $('#personPageHead-nt').html(head);
}

$(document).ready(function() {
    if($('#personPageHead-nt').length) {
        getNewsPerson(location.search);
    }
});

function return_tagname(data) {
    var tagname = data[0][0].FirstName + '+' + data[0][0].LastName;
    return do_shortcode('[rss feed="http://website/tag/' + tagname + '/feed/" num="3"]');
};