2015-02-06 120 views
-1

我想在我的数据库执行SELECT语句,但它一直显示我此消息:如何在SELECT语句中添加一列,并在使用IR where子句

转换时,转换失败类型为int的varchar值'Edad'至数据 。

声明如下:

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

为什么不利用这个计算的年龄吗? 'DATEDIFF(yy,FechaNacimiento,getdate())' – RezaRahmati 2015-02-06 17:55:47

回答

2

'Age'< 16正在比较字符串文字"Age"到一个数字,这是无意义的。

此外,您不能引用在where条款计算列,因为where子句计算列前评估

你可以做一个子查询:

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

哦,我不知道。无论如何,我尝试使用子查询,但它说sintax是错的。但我解决了使用一个查询的问题: 选择nroSocio,categoriaId,转换(INT,DATEDIFF(d,(FechaNacimiento),GETDATE())/ 365.25)为 'EDAD' 从Socios凡(转换(INT, DATEDIFF(d,(FechaNacimiento),getdate())/ 365.25)<16和categoriaId ='711141DB-2D9C-E411-941D-00155DDA4202')或(convert(int,DATEDIFF(d,(FechaNacimiento),getdate()) /365.25)> 14,并且categoriaId ='6F1141DB-2D9C-E411-941D-00155DDA4202') – joacoleza 2015-02-06 18:15:34

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') 
相关问题