簡體   English   中英

SQL別名提供無效的列名

[英]SQL alias gives invalid column name

使用以下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
列名稱'startdate'無效。

我無法在WHERE子句中識別我的別名startdate ,但它可以在我的ORDER BY子句中。 怎么了?

編輯:
不,我不可能將數據類型更改為date而不是datetime 其他地方需要時間。 但在這種情況下,我只需要在特定日期獲取所有帖子,而我真的不關心modifieddate日期的日期是什么時間:)

也許需要另一種方法而不是convert()?

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


將其更改為:

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

做這個:

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 convert(varchar, CampaignCustomer.ModifiedDate, 111) = '2011/11/22'
order by 
  startdate desc, 
  Users.Name asc 

你需要在where子句中添加別名,在上面的查詢中我用你所代表的內容替換你的別名。

您沒有提到您正在使用的SQL Server 版本 - 但如果您使用的是2008或更新版本,則可以使用:

where
  CampaignCustomer.CampaignCallStatusID = 21
  and CAST(CampaignCustomer.ModifiedDate AS DATE) = '20111122'

您可以將其投射到DATE - 僅用於此比較。

另外:如果您需要將日期與字符串進行比較,我建議始終使用ISO-8601標准格式表示日期 - ISO-8601將日期定義為YYYYMMDD並且是SQL Server中唯一始終有效的格式 - 否無論你有什么語言/區域設置。 日期的任何其他字符串表示始終受SQL Server中的設置限制 - 它可能適合您,但我打賭別人,它會破壞....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM