查询时列名称错误无效?

时间:2014-04-16 18:39:50

标签: sql-server tsql

这是我的疑问:

SELECT * FROM CSEReduxDepts, CSEReduxResponses
        WHERE CSEReduxDepts.csedept_id = CSEReduxResponses.employeedept
            AND CSEReduxResponses.status = 1
            AND CSEReduxResponses.execoffice_status = 1
            AND MONTH([CSEReduxResponses.approveddate]) = MONTH(GETDATE())
        ORDER BY approveddate

如果我拿出AND MONTH([CSEReduxResponses.approveddate]) = MONTH(GETDATE()) 它会工作,但我想从本月获得数据。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

试试这个:

select *
    from CSEReduxDepts d
        inner join CSEReduxResponses r on r.employeedept = d.csdept
    where r.status = 1
        and r.execoffice_status = 1
        and MONTH(r.approveddate) = MONTH(GETDATE())
    order by r.approveddate asc

在TSQL查询/语句中使用方括号只允许使用保留字或其他特殊字符,如下所示:

select r.[Approved Date]

您可能会看到列名使用空格,因此适当使用方括号。或者,就像法语一样:

select r.[Date Approuvé]

在方括号之外确实不会接受。

以下是关键字的示例:

select r.[month]

告诉TSQL将单词month解释为列名,而不是TSQL MONTH()函数。

答案 1 :(得分:2)

括号表示范围,如表格或列。通过在两者之间放置括号,您告诉sql server它的一个元素。

这样可行:

[CSEReduxResponses].[approveddate]

但你可能只是删除它们。

此外,正如评论中所述,使用SQL92语法会更好。

SELECT * 
FROM CSEReduxDepts d
inner join CSEReduxResponses r on d.csedept_id = r.employeedept
                              and r.status = 1
                              and r.execoffice_status = 1
Where
     MONTH(r.approveddate) = MONTH(GETDATE())
ORDER BY approveddate