Главная страница
    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.44 MB
Время: 0.035 c
1-1087759289
Dimases
2004-06-20 23:21
2004.07.04
Ищется пример с полностью runеime созданием формы и компонентов!


3-1086682859
Ale
2004-06-08 12:20
2004.07.04
TADODataSet


1-1087198507
Yakudza
2004-06-14 11:35
2004.07.04
Ошибка при закрытии программы


1-1087723329
akvilon
2004-06-20 13:22
2004.07.04
Мои шрифты и Canvas.Font


4-1085210397
tytus
2004-05-22 11:19
2004.07.04
Как свернуть все окна?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский