powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вычитание дат
13 сообщений из 13, страница 1 из 1
Вычитание дат
    #32035724
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется две даты некоторого периода.
Необходимо получить строку 'YY.MM.DD' (это не формат даты !!!), где YY - число лет в периоде,
ММ - число месяцев
DD - число дней
Т.е необходимо получить сколько было лет, месяцев и дней.
Например: ' 08.01.17' означает 8 лет, 1 месяц и 17 дней.
Как изящней решить эту задачу на PLSQL ?
...
Рейтинг: 0 / 0
Вычитание дат
    #32035757
олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне кажется, дни не получится посчитать - месяцы то разные
...
Рейтинг: 0 / 0
Вычитание дат
    #32035770
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все просто
раскладываешь на составляюшие,
yy1=to_number(to_char(первая_дата,'yy')); -- лучше испльзовать 4 знака
mm1=to_number(to_char(первая_дата,'mm'));
dd1=to_number(to_char(первая_дата,'dd'));
потом тоже самое делаешь со второй датой и вычитаешь одно из другого по раздельности с учетом переноса и кол-вом дней в месяце и годе(это уже организационные вопросы)

P.S. интересно, а как будет выглядеть твоя строка между 28.02.1999 и 28.02.2000, а также между 28.02.2000 и 28.02.2001. В каком случае будет считаться, что прошел год?
...
Рейтинг: 0 / 0
Вычитание дат
    #32035912
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я тут немного ошибся в PS.
даты следует читать 28.02.1999 - 29.02.2000 и 29.02.2000 - 28.02.2001.
я просмотрел какие есть функции для работы с датами и обнаружил MONTHS_BETWEEN, которая может существенно упростить мой алгоритм.
...
Рейтинг: 0 / 0
Вычитание дат
    #32035943
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое, спасибо.
...
Рейтинг: 0 / 0
Вычитание дат
    #32036051
g-al@yandex.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select to_date('23-04-2002','dd-mm-yyyy')-to_date('23-04-1977','dd-mm-yyyy'
) a from dual;
...
Рейтинг: 0 / 0
Вычитание дат
    #32036220
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select to_date(to_date('10.07.2002', 'DD.MM.YYYY') - to_date('10.03.1980', 'DD.MM.YYYY')) from dual

ORA-01847: day of month must be between 1 and last day of month.

А не подскажет ли мне уважаемый g-al@yandex.ru как поступать в таком случае?
...
Рейтинг: 0 / 0
Вычитание дат
    #32036319
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мистер (а, не, мусье) SAA_. Форматы данных необходимо соблюдать. Разница дат в скобках имеет тип NUMBER.
А TO_DATE (за скобками) переводит строку (вида даты) по маске в тип DATE. Тут же получаеться чушь:
TO_DATE(8157) - собственно не несет в себе никакого смысла.
Как оракл разбирает эту строку (цифру) да и с какой маскои - не знаю.
...
Рейтинг: 0 / 0
Вычитание дат
    #32036521
g-al@yandex.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно заметил господин None выражение to_date('23-04-2002','dd-mm-yyyy')-to_date('23-04-1977','dd-mm-yyyy' ) дает количество дней в периоде.

Задача средней школы по информатике - перевод дней в года и месяца. :-))
...
Рейтинг: 0 / 0
Вычитание дат
    #32036584
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
g-al@yandex.ru: Это как ты собираешься переводить дни в месяцы и годы? Кол-во дней в году переменно, кол-во дней в месяце тоже. Этот вариант я не стал предлагать потому, что это самый очевидный и самый не точный алгоритм. В варианте с MONTHS_BETWEEN надо разобраться только с кол-вом дней, т.к. кол-во месяцев в году это единственная постоянная величена. Да и с днями разобраться достаточно просто, если внимательно прочитать об этой функции.
...
Рейтинг: 0 / 0
Вычитание дат
    #32036593
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
g-al@yandex.ru, Вы кажется путаете две разные задачи:
1. По номеру дня в году определить его дату
2. Определения кол-ва лет, месяцев и дней между двумя датами.
Это две абсолютно разные задачи.
Например, 30 дней после 1 января это так и будет 30 дней, но теже 30 дней после 1 февраля это уже 1 месяц и 2 дня (или 1 день, в зависимости от високосности года).
...
Рейтинг: 0 / 0
Вычитание дат
    #32036728
g-al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага! Теперь понял вопрос. Действительно напутал... Подумаю, напишу ответ..
...
Рейтинг: 0 / 0
Вычитание дат
    #32036796
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
None, я вас люблю!

1. Именно это я и хотел сказать. ЧУШЬ!!! Предыдущий пример отрабатывает верно (у мистера g-al@yandex.ru), но результат абсолютно не нормален и он не учитывает вариант ответа в моем примере.

2. Я вообще считаю, что разницу надо мерить в жестко заданных еденицах: секундах, минутах, часах, днях, неделях - выраженные целым числом.

3. Хотя выражение, что господин SAA_ родился спустя X лет, Y месяцев и Z дней после рождения мусье vSkv, как бы тоже не лишено смысла.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вычитание дат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]