2014-11-10 2 views
0

У меня есть таблица входа с колонкой DOB. Мне нужна повторяющаяся колонка для возраста. Но я не могу этого сделать. Я могу конвертировать конверсию DOB в Age для одногоВозрастная учетная повторяющаяся колонка с использованием SQL Server 2008 R2

`SELECT FLOOR(DATEDIFF(DAY,'10/10/1990' , getdate())/365.25)` works fine. 

Но мне нужно преобразовать целую колонку.

Если я использую

SELECT FLOOR(DATEDIFF(DAY,Select DOB From login_tbl , getdate())/365.25) like this, 

Это бросает ошибку. Как я могу его получить?

Thankyou

+0

'ВЫБОР DOB, ПОЛ (DATEDIFF (DAY, DOB, GETDATE())/365,25) Из login_tbl' – Mihai

+1

Спасибо и так много Михая! Спасибо u –

ответ

0

Ваш подход будет получить неверный результат в таких случаях ниже:

declare @now date 
set @now = '11/10/2014' 
select 
    FLOOR(DATEDIFF(DAY,'11/10/2013' , @now)/365.25) -- should be 1 but will get 0 
, FLOOR(DATEDIFF(DAY,'11/10/2012' , @now)/365.25) -- should be 2 but will get 1 
, DATEDIFF(DAY,'11/10/2013' , @now) 
, DATEDIFF(DAY,'11/10/2012' , @now) 

Мое предложение:

declare @now date 
set @now = '11/10/2014' 
select (convert(int,convert(varchar(8), @now ,112)) 
     - convert(int,convert(varchar(8),convert(date,'11/10/2013'),112)))/10000 

Вы можете увидеть мои объяснения в this answer.

Так для login_tbl вы можете:

select 
    DOB, (convert(int,convert(varchar(8), DOB ,112)) 
     - convert(int,convert(varchar(8),convert(date,'11/10/2013'),112)))/10000 as AGE 
from 
    login_tbl 
0
select trunc((trunc(sysdate) - to_date('16-mar-2010', 'dd-mon-yyyy'))/ (365.23076923074)) 
from dual 
+0

Объяснение того, что делает ваш sql-файл, будет приятным –