Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

СТАЖ   Найти похожие ветки 

 
mr   (2004-06-10 17:08) [0]

Простите, хоть тему и закрыли, может поможет?

CREATE Procedure dbo.pr_calc_staj
@dd1 DATETIME,
@dd2 DATETIME,
@stag_coeff_ FLOAT,
@yy int =0  OUTPUT,
@mm int =0  OUTPUT,
@dd int =0  OUTPUT

As
BEGIN
 DECLARE
@mm_  INTEGER,
@yy_  INTEGER,
@dd_  INTEGER,
@mm_f  FLOAT,
@yy_f  FLOAT,
@dd_f  FLOAT

 SELECT  @dd2 =  dateadd(day, 1, @dd2)

 if @stag_coeff_ = 0  SELECT @stag_coeff_ = 1
 SELECT @yy = datediff(year, @dd1, @dd2)
 SELECT @mm = datediff(month, dateadd(year, @yy, @dd1), @dd2)

 if @mm < 0
 BEGIN
SELECT @yy = @yy - 1
SELECT @mm = datediff(month, dateadd(year, @yy, @dd1), @dd2)
 END

 SELECT  @dd = datediff(day, dateadd(month, @mm, dateadd(year, @yy, @dd1)), @dd2)
 if @dd < 0
 BEGIN
SELECT @mm = @mm - 1 if @mm < 0
SELECT @mm = 11, @yy = @yy - 1
SELECT @dd = datediff(day, dateadd(month, @mm, dateadd(year, @yy, @dd1)), @dd2)
 END

--  SELECT @yy = @yy * @stag_coeff_, @mm = @mm * @stag_coeff_, @dd = @dd * @stag_coeff_
 SELECT @yy_f = Cast(@yy as float) * @stag_coeff_, @mm_f = Cast(@mm * @stag_coeff_ as float), @dd_f = Cast(@dd * @stag_coeff_ as float)

 SELECT @dd = convert(integer,@dd_f) + (@yy_f - convert(integer, @yy_f))*365 SELECT @yy = convert(integer, @yy_f)
 SELECT @dd = @dd + (@mm_f - convert(integer, @mm_f))*12 SELECT @mm = convert(integer, @mm_f)
 SELECT @dd = convert(integer, @dd) if @dd >= 30
 SELECT @mm = @mm + (@dd-(@dd%30))/30, @dd = @dd%30

 if @mm >= 12 SELECT @yy = @yy + (@mm-(@mm%12))/12, @mm = @mm%12
 if @yy < 0 SELECT @yy = 0, @mm = 0, @dd = 0
 select @yy, @mm, @dd

END


 
sniknik ©   (2004-06-10 17:34) [1]

круто..., но неправильно. можно проше

DECLARE @DATE DateTime
SET @DATE = DATEADD(Day, 0, DATEDIFF(Day, "20031231", "20080101"))
SELECT DATEPART(Year, @DATE) - 1900 AS "Лет",
            DATEPART(Month, @DATE) - 1 AS "Месяцев",
            DATEPART(Day, @DATE)-2 AS "Дней"

но тоже неправильно. погрешности вычисления будут обязательно (связано с тем про что Анатолий Подгорецкий тебе говорил)

даты задаю текстом (строки "20031231", "20080101"), чтобы удобнее пробовать (кстати проверь с февралем в 2000м году (вроде високосный) будет ошибка, как и на многом другом +-пару тройку дней)


 
sniknik ©   (2004-06-10 17:40) [2]

;( в конце не - 2 а - 1. хотя без разници, в погрешность входит... ;о))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.034 c
6-1081058276
test1
2004-04-04 09:57
2004.07.04
Как программно отключить сеть ?


14-1087391414
Ega23
2004-06-16 17:10
2004.07.04
Жена только что позвонила.


1-1087808718
besen-ok
2004-06-21 13:05
2004.07.04
Как получить параметры командной строки ?


1-1087384147
Фагот
2004-06-16 15:09
2004.07.04
Программа-шпион


9-1072257746
Kerby
2003-12-24 12:22
2004.07.04
GLSCENE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский