Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

Как подсчитать количество месяцев между Дата1 и Дата2   Найти похожие ветки 

 
Kostya_iz_angren   (2003-02-27 13:39) [0]

Как подсчитать количество целое число месяцев между Дата1 и Дата2 посредством SQL?
Например:
1) между 01.01.2002 и 31.03.2002 - 3 месяца
2) между 01.01.2002 и 01.04.2002 - 4 месяца
Это нужно для расчёта износа основных средств.


 
Anatoly Podgoretsky ©   (2003-02-27 13:42) [1]

Сколько дней в месяце


 
ermserg ©   (2003-02-27 13:50) [2]

DATEDIFF


 
Kostya_iz_angren   (2003-02-28 10:03) [3]

ermserg>
Эта функция будет работать в IBase? Если да, то с примером пожалуйста, или если есть справочник по IBase командам.
Буду благодарен!!!


 
ermserg ©   (2003-02-28 11:08) [4]

V MSSQL est. IBase v voprose ne bilo.
U tebya knopka F1 est? Nu tak posmotri.


 
Kostya_iz_angren   (2003-02-28 11:21) [5]

ermserg>
Ну и на том, спасибо :(


 
kaif ©   (2003-02-28 13:35) [6]

ИМХО...
Все же лучше почитать серьезную литературу сначала про то, как принято начислять амортизацию и задать пару нелицеприятных вопросов заказчику на этот счет. Я знаю, что бухгалтера во всем мире (не знаю, как у нас...) прибегают к определенным условностям в этом вопросе. Например, считается, что в любом месяце 30 дней, к примеру или еще как-то. Но ни один бухгалтер в мире (не знаю, как у нас...) не будет усложнять этот вопрос и вводить всевозможные нелинейности в линейную амортизацию. Нужно понимать, что амортизация есть весьма условное начисление и способ этого начисления может и должен регулироваться учетной политикой, а не извратами программирования.


 
Johnmen ©   (2003-02-28 13:51) [7]

> 1) между 01.01.2002 и 31.03.2002 - 3 месяца

А между 31.01.2002 и 1.02.2002 ?
:))))


 
ermserg ©   (2003-02-28 14:09) [8]

to Johnmen:
MSSQL2000 pokazivayet 1.


 
Johnmen ©   (2003-02-28 14:15) [9]

>ermserg © (28.02.03 14:09)

Вполне логично, что 02-01=1
Только я бы сказал, что один день :)
Или между 31.01.2002 23:59:59 и 1.02.2002 00:00:00 ? Неужели целый месяц ? ;-)


 
Kostya_iz_angren   (2003-02-28 14:29) [10]

Допустим, даже разница будет 1 сек, 1 млсек. В результате мы залезли в другой месяц, а значит, принимаем за месяц. Это тоже условности...
Данную задачу реализовал без SQL, работает, но выглядит не очень эстетично, а по этой причине решил, что через SQL будет компактней, красивше то бишь...
Про функции в MSSQL (DATEDIFF) мне известно, но есть аналог для IBase, вот в чём вопрос.
Кто знает что либо, было хорошо узнать об этом и другим.


 
ermserg ©   (2003-02-28 14:31) [11]

to Johnmen ©
SQL-92 (a mozhet ranniy) opredelyayet tip dannih INTERVAL. DATEDIFF(chast_intervala, date1, date2) vozvraschayet chast intervala opredelyayemuyu pervim parametrom. Eto mozhet bit year, month, week, day, hour i t.d.


 
ermserg ©   (2003-02-28 14:44) [12]

to Kostya_iz_angren:
a etot vopros luchshe visimo zadat v InterBase forume.


 
Smashich ©   (2003-02-28 14:47) [13]

2Kostya_iz_angren (28.02.03 14:29)

аналог для IB еализуется через UDF


 
spogi   (2003-02-28 15:01) [14]

mogu dat xoroshiy sovet!
konechno luchshe knig prochitat, no vse taki:
est takaya funksiya DECODER napr.

DecodeDate(Year1, Month1, Day1, StrToDate(Edit1.Text));
DecodeDate(Year2, Month2, Day2, StrToDate(Edit2.Text));

Kak ti ponyal edit1 i edit2 soderjat dati...
a potom Month2-Month1 = to chto ti xocesh...


 
ZeroDivide ©   (2003-02-28 15:18) [15]

PL/SQL
Round((Data1 - Data2)/30)

30 Потому что для бугалтерских расчетов стандарт - 30 дней в месяце.


 
Higs   (2003-03-01 21:22) [16]

Для расчета амортизации фиолетово, сколько дней в месяце: начисление идет целиком за месяц, а не по дням! Поэтому то, что сказал spogi, и есть то, что нужно!


 
kaif ©   (2003-03-01 23:27) [17]

Так все же зачем вычислять эту разницу?
Если амортизация систематически начисляется каждый месяц, так и начисляйте фиксированную величину каждый месяц (скажем, в последнюю пятницу месяца). А если она начисляется за некий период в произвольный момент, то пусть уж лучше тогда будет пропорциональна величине
ПН*K*(date1-date2)/365.25
где ПН - первоначальная стоимость, К-коэффициент амортизации (равен 1/10, если период полной амортизации для данной позиции 10лет, к примеру).
А вообще нормальные челы по-моему начисляют амортизацию раз в год...



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

Текущий архив: 2003.03.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
1-64194
Delphi Mania
2003-03-08 00:26
2003.03.20
Как вызвать окно


1-64126
GrayWolf
2003-03-11 09:24
2003.03.20
Поиск файлов в подкаталогах n-ой глубины


1-64178
_stranger_
2003-03-07 17:58
2003.03.20
Qreport


3-63971
Сергей Шапранов
2003-02-27 18:23
2003.03.20
Проблема с файлами lck


1-64099
shane54
2003-03-06 21:05
2003.03.20
Как получить имя пользователя?