我正在尝试在我的数据库中执行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
。
答案 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')