Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2010, 16:57   #1
Sfera
 
Регистрация: 06.04.2009
Сообщений: 7
Лампочка Вопрос, по вычислению стажа работы с типом Date

Здравствуйте! Такой вопрос:
У меня есть атрибуты под названием : дата устройства на работы и сегодняшняя дата, нужно вычислить стаж работы сотрудника по этим 2 атрибутам…
Когда я создавала таблицы в Database Desktop все атрибуты имеют тип Date, я прописала маленький код для вычисления «сегодняшняя дата – дата устройства на работу» он мне выдает правильный ответ, но в не в том виде, который мне нужен, результат такой «12.09.1901». А по заданию нужно, чтоб выдал количество лет! Прошу помощи, буду очень благодарна.
Sfera вне форума Ответить с цитированием
Старый 03.10.2010, 00:55   #2
palevg
Пользователь
 
Аватар для palevg
 
Регистрация: 03.10.2010
Сообщений: 77
По умолчанию

Есть такие процедуры как DecodeDate и EncodeDate.
Думаю, помогут
По соотношению цена-качество, халявное пиво не имеет конкурентов.
palevg вне форума Ответить с цитированием
Старый 03.10.2010, 10:07   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А по заданию нужно, чтоб выдал количество лет!
Select... Year(сегодняшняя дата)-Year(дата устройства на работу)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.10.2010, 13:47   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Select... Year(сегодняшняя дата)-Year(дата устройства на работу)
Ну, это зависит от СУБД (далеко не в каждой есть функци Year)
Да и эта разность не для всех будет верна (плюс/минус год
поясню.
человек, которого взяли на работу 31.12.2009 по состоянию на 1.01.2010 уже проработал ГОД (согласно Вашей формуле).
Зато человек, которого взяли 1.01.2010 к 31.12.2010 отработал 0 лет (что, кстати, с точки зрения вычисления полного стажа - правильно).

Sfera, существует множество возможных способов и алгоритмов решения данной задачи. Самый лучший - используя средства Вашей СУБД так составить правильную формулу, чтобы при использовании этой формулы прямо в SELECT ... формула as WorkStage - получать рабочий стаж.
Либо можно это сделать на клиенте (например, как Выше было предложено, через DecodeDate получить день, месяц, год и дальше подставлять эти значения в формулу, написанную на Delphi
либо, самый примитивный способ, который будет давать правильный ответ в 99.9% случаев (кстати, я не рекомендую его использовать, если получаемая величина рабочего стажа используется при финансовых/бухгалтерских расчётах):
int(Date1 - Date2) - это количество полных дней между датами, тогда стаж ~~ trunc(int(Date1 - Date2)/365.25)

p.s. рекомендую воспользовать поиском по данному форуму. Такие задачи здесь решались/обсуждались. А ещё, для решения задачи в рамках SQL рекомендую поискать решение на форуме SQL.RU
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2010, 15:57   #5
Sfera
 
Регистрация: 06.04.2009
Сообщений: 7
По умолчанию

Благодарю за ответы =)
Sfera вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по формату Date Vit@L Общие вопросы Delphi 11 23.03.2010 12:43
программа по вычислению последовательности чисел crystalcat Помощь студентам 3 03.11.2009 22:59
Вопрос оптимизации работы с MS Word Mixasik Общие вопросы Delphi 1 15.06.2009 12:13
Киньте пример работы с типом CHAR zotox Помощь студентам 6 05.05.2009 16:37
Расчет стажа работы John_chek Общие вопросы Delphi 6 13.04.2007 13:38