为什么我不能在where子句中使用Convert()列?

时间:2014-03-27 15:42:10

标签: sql

以下SQL

select creationdate as dt 
from dbo.Posts2
where dt > '2013-06-31'

运行时出错:

  

Msg 207,Level 16,State 1,Line 1
  列名称无效' dt'。

更新

这有效:

Declare @date as varchar(30)
set @date='2008-07-31 21:42:52.667'
select convert(datetime,@date, 101) as [DateColumn]

但是失败了:

select creationdate from dbo.Posts2
where  convert(datetime, creationdate, 101) > '2013-06-31'

错误是:

  

导致将varchar数据类型转换为日期时间数据类型   在超出范围的价值。

为什么?

1 个答案:

答案 0 :(得分:3)

不能where子句中使用别名。

只需写下

where convert(datetime, creationdate) > '2013-06-31'

编辑datetime / varchar转换错误:

您尝试与不存在的日期进行比较:6月只有30天,因此“2013-06-31”不是SQL Server的日期。