powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как посчитать возраст?
13 сообщений из 38, страница 2 из 2
Как посчитать возраст?
    #33384712
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmiyкак в нашей системе - я сам не знаю)а читаю уж полдня.

Можно я этот мрак закрою?
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #33533782
Dmyttro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Select trunc(months_between(Конечная_дата, Начальная_дата)/12) from dual
Количество полных лет.
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #33534467
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи у Кайта. У него были рекомендации по вычислению возраста. Основная идея - считать в месяцах(поскольку чило месяцев в году фиксировано), а оставшийся кусочек - в днях.


"Странно, но у нас все работает..."(с) HelpDesk
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #33535564
3#88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZmiyЕсть ли какая-нибудь фунция для реализации подсчета возраста? То есть отнимаем от системного времени или заданного дату рождения в формате date и получаем сколько дней к примеру или месяцев и дней?

SQL> select abs(trunc(months_between( d1, d2 ) /12 )) years,
2 greatest(d1,d2)-add_months( least(d1,d2),
3 12*abs(trunc(months_between( d1, d2 ) /12 )) ) days
4 from ( select to_date( '25-jan-1910' ) d1,
5 to_date(SYSDATE,'DD-MON-YYYY') d2
6 from dual );

YEARS DAYS
---------- ----------
96 15
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как посчитать возраст?
    #39309760
Фотография mcwhite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT FLOOR(MONTHS_BETWEEN(:p_curr_date
                           ,CASE WHEN -- Если в году даты p_curr_date нет 29 февраля, то датой рождения принимается 1 марта
                                          EXTRACT(DAY FROM :p_birth_date) = 29
                                      AND EXTRACT(MONTH FROM :p_birth_date) = 2
                                      AND EXTRACT(DAY FROM LAST_DAY(ADD_MONTHS(TRUNC(:p_curr_date,'year'),1))) < 29
                                 THEN :p_birth_date + 1
                                 ELSE :p_birth_date
                            END
                           ) / 12) AS age
  FROM dual
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39309790
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcwhite,

ну ладно молодняк.... но, ты то что, 10 лет назад функцию sleep нашел и в цикла на 10 лет себя загнал, а теперь проснулся и решил выдать свой вариант?
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39309803
Фотография mcwhite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintmcwhite,

ну ладно молодняк.... но, ты то что, 10 лет назад функцию sleep нашел и в цикла на 10 лет себя загнал, а теперь проснулся и решил выдать свой вариант?

Нет, просто нек. время назад применил такую логику расчета возраста, вот и решил, так сказать, "вынести на суд общественности". Ну и вместо создания нового топика поместил в наиболее подходящий из уже существующих. Только и всего. :)
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39309877
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcwhiteVintmcwhite,

ну ладно молодняк.... но, ты то что, 10 лет назад функцию sleep нашел и в цикла на 10 лет себя загнал, а теперь проснулся и решил выдать свой вариант?

Нет, просто нек. время назад применил такую логику расчета возраста, вот и решил, так сказать, "вынести на суд общественности". Ну и вместо создания нового топика поместил в наиболее подходящий из уже существующих. Только и всего. :)
насчет 100/400х сот лет тоже предусмотрели?

....
stax
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39311355
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал попросту так:
Может пригодится:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with tab_s as ( select to_date('09.11.2016', 'dd.mm.yyyy')+1  /* если считаешь что 8 - то убери +1*/ a  
                     , to_date('01.01.2014', 'dd.mm.yyyy') b from dual ),
     tab as ( select a, b, months_between( a, b ) dt from tab_s )

  select trunc( dt / 12 ) || ' лет ' || mod( trunc( dt ), 12 ) || ' месяцев ' ||
         case when extract( day from b ) > extract( day from a )
              then greatest( extract( day from last_day( add_months(a, -1) ) ), extract( day from b ) ) +
                   extract( day from a ) - extract( day from b )
              else extract( day from a ) - extract( day from b )           
            end || ' дней' dt
          from tab;
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39311358
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что-то типа такого, но забросил так как не понадобилось...
Нужно в более красивый вид привести.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
DECLARE
  DateS   DATE := TO_DATE('01.01.2014','dd.mm.yyyy'); 
  DatePo   DATE := TO_DATE('09.11.2016','dd.mm.yyyy')+1; 
  Days_cnt    NUMBER;
  Months_Cnt  NUMBER;
  Years_Cnt   NUMBER;
  Y_string VARCHAR2(4):='лет';
  M_string VARCHAR2(10):='месяцев';
  D_string VARCHAR2(10):='дней';
                                       
BEGIN


  Months_Cnt := mod( trunc( months_between(DatePo,DateS) ), 12 );
  Years_Cnt  :=  trunc( months_between(DatePo,DateS)/12);

  IF  EXTRACT( DAY  FROM  DateS ) > EXTRACT( DAY FROM DatePo )
              THEN  Days_cnt:= GREATEST( EXTRACT( DAY FROM last_day( add_months(DatePo, -1) ) ), EXTRACT( DAY FROM  DateS ) ) 
                +  EXTRACT ( DAY  FROM  DatePo ) - EXTRACT ( DAY  FROM  DateS );
              ELSE Days_cnt:= EXTRACT( DAY FROM DatePo ) - EXTRACT( DAY FROM  DateS );
                END IF;


dbms_output.put_line('года='||Years_Cnt);
dbms_output.put_line('месяцs='||Months_Cnt);
dbms_output.put_line('дни='||Days_cnt);

------YEARS----------
      IF (MOD(Years_Cnt,
              10) = 1) AND
         (Years_Cnt NOT IN (11,111,211,311,411,511))
      THEN
        Y_string := 'год ';
      ELSIF (MOD(Years_Cnt,10) IN (2,3,4)) AND
            (NOT (Years_Cnt IN (12,13,14)))
      THEN
        Y_string := 'года';
      ELSE
        Y_string := 'лет';
      END IF; 

---------MONTHS--------
      IF Months_Cnt = 1
      THEN
        M_string :=  'месяц';
      ELSIF (Months_Cnt IN (2,3,4))
      THEN
        M_string :=  'месяца';
      ELSE
        M_string := 'месяцев';
      END IF;

   -------DAYS---------- 

      IF (MOD(Days_cnt,100) IN (11,12,13, 14)) OR
         (MOD(Days_cnt,10) NOT IN (1,2,3,4))
      THEN
        D_string :='дней';
      ELSIF (MOD(Days_cnt,10) = 1)
      THEN
        D_string :=  'день';
      ELSE
        D_string := 'дня';
      END IF;

   ----------------- 

dbms_output.put_line('-----------------' );
dbms_output.put_line(Years_Cnt||' '||Y_string||' '||Months_Cnt||' '||M_string||' '||Days_cnt ||' '||D_string );
END;


Если кто-то подскажет как поинтереснее окончание слов сделать - буду благодарен и оставлю на память )))
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39311492
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moss
Если кто-то подскажет как поинтереснее окончание слов сделать - буду благодарен и оставлю на память )))
ищите програмульки типа прописью с учетом рода (м/ж)


ps
много ++++ самому написать/понять
когда я переходил с асемблера и рл/1 третья моя прграмулька на фоксе была прописью
я понимал что тригодится
......
stax
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39311689
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MossЕсли кто-то подскажет как поинтереснее окончание слов сделать
рубль/рубля/рублей
...
Рейтинг: 0 / 0
Как посчитать возраст?
    #39311699
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как посчитать возраст?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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