Форум: "Базы";
Текущий архив: 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