2014-10-18 7 views
-3
SELECT * FROM hr.Employees; 

SELECT firstname, 
     lastname, 
     (CASE WHEN (month(getdate()) > month(birthdate))    
      THEN datediff(yy,birthdate,getdate())    
      ELSE datediff(yy,birthdate,getdate()) -1 
     END) AS _years,   --years   
     (CASE WHEN (month(getdate()) > month(birthdate))    
      THEN month(getdate()) - month(birthdate)    
      ELSE month(getdate()) - month(birthdate) +12    
     END) AS _months,  --months 
     (CASE WHEN (day(getdate()) > (day(birthdate)))    
      THEN day(getdate()) - day(birthdate)     
      ELSE month(getdate()) - month(birthdate) +11 & day(getdate()) + (day(EOMonth(birthdate)) - day(birthdate))   
     END) AS _days   --days 
FROM hr.Employees 

Вот код для поиска возраста в уу, мм, дд. Проблема, с которой я столкнулась, находится в разделе «Дни».Использование подзапросов в найти возраст

Я хочу сделать это (if current day < birthdate day), затем (currentMonth-birthmonht)+11 and day(getdate()) + (day(EOMonth(birthdate)) - day(birthdate)).

+0

Это очень плохо отформатировано, и SQL выглядит сломанным. –

ответ

0

Я хочу сделать (если текущий день < день рождения), то (currentMonth-birthmonht) +11 и день (GETDATE()) + (день (EOMONTH (дата рождения)) - день (дата рождения)).

Это не может быть сделано в CASE в days колонке вам необходимо добавить новый пункт WHEN в самом CASE для month колонны. Как следующий код

SELECT firstname, 
     lastname, 
     (CASE WHEN (month(getdate()) > month(birthdate)) THEN datediff(yy,birthdate,getdate())    
      ELSE datediff(yy,birthdate,getdate()) -1 
     END) AS years,     
     (CASE WHEN (month(getdate()) > month(birthdate)) THEN month(getdate()) - month(birthdate) 
      WHEN (day(getdate()) > (day(birthdate))) THEN month(getdate()) - month(birthdate) +11 
      ELSE month(getdate()) - month(birthdate) +12 
     END) AS months,  
     (CASE WHEN (day(getdate()) > (day(birthdate))) THEN day(getdate()) - day(birthdate)     
      ELSE day(getdate()) + (day(EOMonth(birthdate)) - day(birthdate))   
     END) AS days   
FROM Employees 

Вот SQL скрипку демо запроса: SQL Fiddle

Если вы можете использовать T-SQL this ответ показывает, как сделать это в T-SQL.

Смежные вопросы