Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычеслить кол-во месяцов из двух дат 
V
    Опции темы
kentaro
Дата 22.2.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Как вычеслить кол-во месяце из двух дат?
PM MAIL   Вверх
password
Дата 22.2.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: 4
Всего: 8



Код

select (trunc(sysdate)-to_date('01.01.2010','dd.mm.yyyy'))/30 kols from dual


Ну это если грубо взять среднее кол-во дней в месяце за 30 )))
PM MAIL Skype   Вверх
ToshaCh
Дата 22.2.2010, 17:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Внезапно первая ссылка в гугле: http://www.techonthenet.com/oracle/functio...ths_between.php

Это сообщение отредактировал(а) ToshaCh - 22.2.2010, 17:39


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
kentaro
Дата 23.2.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Большое спасибо smile 
PM MAIL   Вверх
kentaro
Дата 26.2.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



ToshaCh, А есть ли такие же функции для подсчёта дней,лет?
PM MAIL   Вверх
ToshaCh
Дата 26.2.2010, 13:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Ну для дней тут тупо trunc(date1-date2), т.к. результат любой арифметики от двух дат это number. А для годов вроде нет специальной функции, но, опять таки внезапно, months_between/12.


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
kentaro
Дата 26.2.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



ToshaCh, 
Не знаю почему но в процедуре он не работает,хотя должен показывать разность дней,лет,годов и.т.д
Код

select  to_char(trunc(sysdate) + (dt2 - dt1),'hh24:mi:ss') into vDay,
       lpad(trunc(dt2) - trunc(add_months(dt1,trunc(months_between(dt2, dt1)))),2,'0')||'.'||
       lpad(trunc(mod(months_between(dt2, dt1),12)),2,'0')||'.' ||
       lpad(trunc(months_between(dt2, dt1)/12),4,'0')||' '||
      
  from (select to_date(Date2, 'dd.mm.yyyy') dt2, to_date(Date1, 'dd.mm.yyyy') dt1 from dual);


PM MAIL   Вверх
Zloxa
Дата 27.2.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(kentaro @  26.2.2010,  14:53 Найти цитируемый пост)
to_date(Date2, 'dd.mm.yyyy') dt2, to_date(Date1, 'dd.mm.yyyy') dt1

Date1,Date2 - какого типа?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
kentaro
Дата 27.2.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Zloxa, date
PM MAIL   Вверх
Zloxa
Дата 27.2.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(kentaro @  27.2.2010,  15:43 Найти цитируемый пост)
date 

А теперь внимательно думаем что мы получим, если к дате сделаем to_date

Добавлено через 1 минуту и 2 секунды
ну или еще более конкретный хинт - какого типа аргумент должен быть у функциии to_date?

Добавлено через 7 минут и 58 секунд
бох с ним и вовсе без намеков.

to_date первым аргументом принимаест строку, потому выполняя указанную конструкцию, оракл дату неявно переобразует в строку используя шаблон, прописанный в nls параметрах сессии. После чего Вы полученную строку явно пытаетесь преобразовать к дате используя шаблон, указанный вторым аргументом. Если шаблоны не совпадают, вы получаете в результате нечто не предсказуемое а не дату.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
kentaro
Дата 1.3.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Zloxa 

Код

select  to_char(trunc(sysdate) + (dt2 - dt1),'hh24:mi:ss') into vDay,
       lpad(trunc(dt2) - trunc(add_months(dt1,trunc(months_between(dt2, dt1)))),2,'0')||'.'||
       lpad(trunc(mod(months_between(dt2, dt1),12)),2,'0')||'.' ||
       lpad(trunc(months_between(dt2, dt1)/12),4,'0')||' '||
      
  from (select Date2 as dt2, Date1 as dt1 from dual);

Всё равно даёт ошибку.А как тогда мне дату привести к нужному формату не используя to_date?
PM MAIL   Вверх
Zloxa
Дата 1.3.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(kentaro @  1.3.2010,  09:49 Найти цитируемый пост)
Всё равно даёт ошибку

у тебя  выражение завершается оператором конкатенации, которому, на самом деле нужен еще один операнд.
у тебя into находится совсем не в том месте, где ему следовало бы
Цитата(kentaro @  26.2.2010,  14:53 Найти цитируемый пост)
 в процедуре

В процедуре предпочтительнее использовать процедурный язык для выполенния подобных операций, нежели использовать язык запросов.
Код

  vDay := to_char(trunc(sysdate) + (Date2 - Date1),'hh24:mi:ss')||' '|| 
       lpad(trunc(Date2) - trunc(add_months(Date1,trunc(months_between(Date2, Date1)))),2,'0')||'.'||
       lpad(trunc(mod(months_between(Date2, Date1),12)),2,'0')||'.' ||
       lpad(trunc(months_between(Date2, Date1)/12),4,'0');

Цитата(kentaro @  1.3.2010,  09:49 Найти цитируемый пост)
.А как тогда мне дату привести к нужному формату не используя to_date? 

Дата это уже "нужный формат".



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
kentaro
Дата 1.3.2010, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Zloxa, Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.4154 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.