Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определение возраста по дате рождения и тек.дате  [new]
darkbird81
Member

Откуда: там, далеко
Сообщений: 2329
Нужно определить возраст сотрудника, в годах естественно, просто в годах.
Сделать желательно в SQL-запросе.
Запутался в разнообразных топиках тут на форуме.
Кто-то считает через дни, учитывая високосные года, кто-то через месяцы, кто-то целые программы пишет..

1. вот беру просто вычитаю дату рождения из тек.даты (тек.дата 23.01.2009):
select ...
({fn CURRENT_DATE()}-K1.Kpu_DtRoj) AS Age1

получаю разность типа дата, но почему-то неверно (на мой взгляд) считается число месяцев и дней между датами.

2. использую ODBC-функцию и считаю возраст через количество месяцев:
select...
{fn TIMESTAMPDIFF(SQL_TSI_MONTH, K1.Kpu_DtRoj, {fn CURRENT_DATE()})}/12 AS Age2

получаю вроде правильный возраст.

Что можете сказать ? Верны ли мои рассуждения и можно ли так считать возраст ?

результат работы запроса в небольшом прилагаемом файле.

К сообщению приложен файл. Размер - 0Kb
23 янв 09, 16:42    [6728439]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
_djХомяг
Guest
datediff
23 янв 09, 16:56    [6728536]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
Mr Marmelad
Member [заблокирован]

Откуда: Boston MA
Сообщений: 2957
Коллега попробуйте такую функцию:

CREATE FUNCTION dbo.fAgeCalc(@DOB datetime,@Date datetime) 
RETURNS smallint
AS
-- * select dbo.fAgeCalc('1989-05-11',GetDate())

BEGIN 
RETURN (SELECT 
	CASE 
		WHEN MONTH(@DOB)>MONTH(@Date) THEN DATEDIFF(YYYY,@DOB,@Date)-1 
		WHEN MONTH(@DOB)<MONTH(@Date) THEN DATEDIFF(YYYY,@DOB,@Date) 
		WHEN MONTH(@DOB)=MONTH(@Date) THEN 
             CASE 
		WHEN DAY(@DOB)>DAY(@Date) THEN DATEDIFF(YYYY,@DOB,@Date)-1 
		ELSE DATEDIFF(YYYY,@DOB,@Date) 
	 END

    END) 
END
23 янв 09, 17:04    [6728580]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
darkbird81
Member

Откуда: там, далеко
Сообщений: 2329
_djХомяг
datediff


при расчете среднего возраста по подразделениям datediff выдает результат на год меньше :(
23 янв 09, 17:11    [6728635]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
Забыла_пароль...
Guest
Так покатит?

CREATE FUNCTION [dbo].[Age_calc](@birthday int,@date int)
RETURNS int
AS

declare @value int
set @value = max((((-@birthday/10000+@date/10000))*10000
+ (-@birthday%10000/100+@date%10000/100)*100
+ (-@birthday%100+@date%100)
)/10000)

return @value
23 янв 09, 17:19    [6728681]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
darkbird81
Member

Откуда: там, далеко
Сообщений: 2329
Mr Marmelad

о да, пасиб !! похоже правильно работает. а то что я раньше делал было с ошибкой.

Забыла_пароль...

не смог разобраться в запросе.. программно делаю- дробные числа выдает, а запросом- не получается, т.к. выдает ошибку преобразования типов (я обращаюсь к sql-серверу через ODBC-драйвер)

К сообщению приложен файл. Размер - 0Kb
26 янв 09, 15:11    [6737035]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT
 DATEDIFF(YEAR,@Birthday, GETDATE())+
 (SIGN(DATEDIFF(DAY,@Birthday, DATEADD(YEAR, YEAR(@Birthday)-YEAR(GETDATE()), GETDATE())))-1)/2;
26 янв 09, 15:49    [6737306]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Определение возраста по дате рождения и тек.дате  [new]
Yuraz.com
Member

Откуда:
Сообщений: 802
так делаю:
SELECT YEAR(getdate()-'20101209')-1900
10 дек 16, 20:15    [19988489]     Ответить | Цитировать Сообщить модератору
 Re: Определение возраста по дате рождения и тек.дате  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
Yuraz.com,
две тысячи девятый год, две тысячи девятый, Карл!
10 дек 16, 23:08    [19988861]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить