如何在select语句中添加列并在where子句中使用ir

时间:2015-02-06 17:51:29

标签: sql sql-server

我正在尝试在我的数据库中执行select语句,但它不断向我显示此消息:

  

将varchar值'Edad'转换为数据时转换失败   输入int。

声明如下:

select nroSocio, categoriaId, convert(int,DATEDIFF(d, (FechaNacimiento), getdate())/365.25) as 'Age' 
from Socios 
Where ('Age'< 16 and categoriaId='711141DB-2D9C-E411-941D-00155DDA4202')
   or ('Age' > 14 and categoriaId='6F1141DB-2D9C-E411-941D-00155DDA4202')

我尝试过使用CONVERT(INT,'Age'),但错误信息是一样的。另外,我尝试使用'Age' > '14',这样查询就会被执行但是它不能正常工作,似乎'Age' > '14'总是正确的。

顺便说一句,我正在使用sql server 2012

2 个答案:

答案 0 :(得分:2)

'Age'< 16正在将字符串文字 "Age"与数字进行比较,这是无意义的。

此外,您不能在where子句中引用计算列,因为{<1}}子句在计算列之前计算

你可以做一个子查询:

where

答案 1 :(得分:0)

在查询中使用此派生表

Select * from (
       select 
            nroSocio, 
            categoriaId, 
            DATEDIFF(yy, FechaNacimiento, getdate()) as Age
       from Socios ) t
Where (Age< 16 and categoriaId='711141DB-2D9C-E411-941D-00155DDA4202')
   or (Age > 14 and categoriaId='6F1141DB-2D9C-E411-941D-00155DDA4202')