2015-02-06 44 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') 
相關問題