SQL 别名给出无效的列名

标签 sql sql-server sql-server-2005

使用以下 SQL 表达式,但出现错误。

select
  CampaignCustomer.CampaignCustomerID,
  convert(varchar, CampaignCustomer.ModifiedDate, 111) as startdate,
  CampaignCustomer.CampaignID,
  CampaignCustomer.CampaignCallStatusID,
  CampaignCustomer.UserID,
  CampaignCustomerSale.Value,
  Users.Name
from CampaignCustomer
  inner join CampaignCustomerSale
    on CampaignCustomer.CampaignCustomerID = CampaignCustomerSale.CampaignCustomerID
  inner join Users
    on CampaignCustomer.UserID = Users.UserID
where
  CampaignCustomer.CampaignCallStatusID = 21
  and CampaignCustomer.startdate = '2011/11/22'      <------- THIS
order by
  startdate desc,
  Users.Name asc

错误:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'startdate'.

我无法识别 WHERE 子句中的别名 startdate,但可以识别 ORDER BY 子句中的别名。怎么了?

编辑:
不,我不可能将数据类型更改为 date 而不是 datetime。其他地方需要时间。但在这种情况下,我只需要获取特定日期的所有帖子,我真的不关心 modifieddate 是日期的什么时间:)

也许需要另一种方法来代替convert()?

最佳答案

不能在 WHERE 子句中使用列别名。

<小时/>

将其更改为:

where
  CampaignCustomer.CampaignCallStatusID = 21
  and convert(varchar, CampaignCustomer.ModifiedDate, 111) = '2011/11/22' 

关于SQL 别名给出无效的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8243283/

相关文章:

sql - 大表更新查询慢

sql-server - 展平/合并重叠的时间间隔

sql - IF EXISTS 不工作

Sql 触发器 - 它属于哪个表?

sql - 如何查询数据库中用户的排名,但只考虑每个用户的最新条目?

php - 如何将用户数据传递到 SQL 查询中?

php - 执行MySQL查询时如何获取错误值?

sql - 如何从 SQL Server 中删除图表支持对象?

sql-server - 将一列拆分为多行

sql-server-2005 - SQL Server 报告服务 2005 许可