split with day, month and year in a date

Hi all

I have this point of view

with (id, dt) t (select 1, to_date('02/06/2010','MM/DD/YYYY') of all the double union)
Select 2, to_date('11/29/2001','MM/DD/YYYY') of all the double union
Select 3, to_date('02/06/2011','MM/DD/YYYY') of all the double union
Select option 4, double to_date('10/10/2011','MM/DD/YYYY')
)
--
-end of test data
--
SELECT id, dt
floor (months_between(sysdate,dt)/12) years
, floor (mod (months_between (sysdate, dt), 12)) months
-The day is ambiguous because of the number of days in a different month
-you could design your own algorithm to give the desired results, but it is a good approximation
, floor (sysdate-(add_months (dt, floor (months_between (sysdate, dt))) as dys
t
/
ID DT YEARS MONTHS DYS
---------- ----------- ---------- ---------- ----------
1-6 FEBRUARY 2010 5 8 22
2 29 NOVEMBER 2001 13 10 29
3-6 FEBRUARY 2011 4 8 22
4-10 OCTOBER 2011 4 0 18

As a result, 26 years old, 26 months, 91 days.


And subtract years, MONTHS and DYS as format

erase years, from 1 to 12 months and the days of the 1 to 30 as

91 days = 30 x 3 + 1 = > 1 day over 3 months

26 months + 3 months = 29 months = > 24 months + 5 months = 2 years + 5 months

and 26 years + 2 years = 28

desire to result: 28 years, 5 months and 1 day.

Is there a function that give me this result from the query above?

Kind regards

Gordan

Hello Gordan,.

I understand that you are the SUM of all the lines.

Here are two ideas:

-1 - using a date
(a) SUM (TRUNC (sysdate) - dt)
I would give you the total number of days.
(b) adding the number of days to, for example, DATE ' 1900-01-01' would give another date...
(c) simply subtract the years 1900 and it takes several years,
subtract 1 from the month (1-12 from January to December) and you have the number of months
subtract 1 from the day of the month (1-31) and you have the number of days.
It is of course 'approximate' as the months do not have the same number of days...

-2 - using only the number of days
Maybe you want something else, for example: the total number of days divided by 365.25 for many years, the recall divided by 30 to get the number of months, the reminder being the number of days.

(a) SUM (TRUNC (sysdate) - dt)

I would give you the total number of days.

(b) Division by 365.25 (le.25 is to take leap years into account, but you can choose for example "365")

(c) number of reminder of days (total - years * 365.25): divided by 30 is the number of months

(d) number reminder of days (total - years * 365.25 - months * 30): gives the number of days.

The following two options with your test data (by chance, this gives the same result in this case)

option 1:
with (id, dt) t (select 1, to_date('02/06/2010','MM/DD/YYYY') of all the double union)
Select 2, to_date('11/29/2001','MM/DD/YYYY') of all the double union
Select 3, to_date('02/06/2011','MM/DD/YYYY') of all the double union
Select option 4, double to_date('10/10/2011','MM/DD/YYYY')
)
target_date AS
(SELECT DATE ' 1900-01-01' + SUM (TRUNC (sysdate) - t.dt) FROM t trgt)
in_pieces AS
(SELECT TO_NUMBER (TO_CHAR (td.trgt, 'YYYY')) - 1900 y
, TO_NUMBER (TO_CHAR (td.trgt, 'MM')) - 1 m
, TO_NUMBER (TO_CHAR (td.trgt, 'DD')) - 1 d
Target_date TD
)
SELECT "result: ' |"
TRIM (CASE WHEN ip.y = 0 THEN NULL
WHEN ip.y = 1 THEN "1 year"
Of OTHER TO_CHAR (ip.y) | "years".
END |
CASE WHEN ip.m = 0 THEN NULL
WHEN ip.m = 1 THEN "1 month"
Of OTHER TO_CHAR (ip.m) | 'months '.
END |
CASE WHEN ip.d = 0 THEN NULL
WHEN ip.d = 1 THEN "1 day"
Of OTHER TO_CHAR (ip.d) | 'days '.
END
)
Of in_pieces ip
;
result: 28 years, 4 months and 28 days

option 2:

with (id, dt) t (select 1, to_date('02/06/2010','MM/DD/YYYY') of all the double union)
Select 2, to_date('11/29/2001','MM/DD/YYYY') of all the double union
Select 3, to_date('02/06/2011','MM/DD/YYYY') of all the double union
Select option 4, double to_date('10/10/2011','MM/DD/YYYY')
)
nb_days AS
(SELECT SUM (TRUNC (sysdate) - t.dt) n t)
, y AS
(SELECT Nb.n, FLOOR (nb.n / 365.25) y nb_days n. b.)
ym AS
(SELECT y.n, y.y, FLOOR ((y.n-y.y * 365,25) / 30) FROM a)
ymd AS
(SELECT ym.y, ym.m, ym.n - ym.y * 365.25 - ym.m * ym FROM 30 d)
SELECT "result: ' |"
TRIM (CASE WHEN ymd.y = 0 THEN NULL
WHEN ymd.y = 1 THEN "1 year"
Of OTHER TO_CHAR (ymd.y) | "years".
END |
CASE WHEN ymd.m = 0 THEN NULL
WHEN ymd.m = 1 THEN "1 month"
Of OTHER TO_CHAR (ymd.m) | 'months '.
END |
CASE WHEN ymd.d = 0 THEN NULL
WHEN ymd.d = 1 THEN "1 day"
Of OTHER TO_CHAR (ymd.d) | 'days '.
END
)
WAN
;
result: 28 years, 4 months and 28 days

Best regards

Bruno Vroman.

Tags: Database

Similar Questions

  • Set the calendar to display day, month and year

    In addition to the time of day, my computer began giving the day of the week (Monday) only instead of day, month and year as it did before. Tried to go back to 29/12/2014 or something similar without success.  Any suggestions?

    Hello

    Sorry for the late reply and I appreciate your patience.

    User profile corruption might have caused the problem. As a solution, I suggest to create a new user profile and check if the date format displays the same thing.

    To do this, see the link below.

    http://Windows.Microsoft.com/en-us/Windows/fix-corrupted-user-profile#1TC=Windows-7.

    It will be useful. Just answer us with the State, and we will be happy to help you.

  • I want to collect rain for the day, month and year; Can what formula I use?

    I want to collect rain for the day, month and year; What formula or expression that I can use.

    I use a Rain Wise product that converts impulses to an analog value.  The rain wise device can be

    "the value measure up to 1", 5", or 10".  I will be setting the unit at 10 inches in increments of 0.01 inch.

    What I would do is at each time increments of signal I would consider it as 0.01 then after reaching

    a period of time a day or a month, back to zero.

    Need some advice on this problem.

    How about you, using a counter to count the number of times where the signal is less than 0.01?

    For example,.

    Counter.Count = signal<=>

    The total number of rain is

    Counter * 10 + signal

    Use TimeOfDay or TimeOfWeek to reset the counter.

  • Get the number of days, months and year

    Hi all

    I'm using OBIEE 11 g. I have a line of dash for year (2010, 2011, etc.) and months (Jan, Feb,..., Dec). How can I get the number of days in a given month and year in my report?

    For example, if I choose to Jan & 2011, I'd get 31 and 356. And if I choose Feb & 2011, I would get 28 and 356.

    Thank you!

    I have something more good option here... Try to use this

    DAYOFMONTH (TIMESTAMPADD (SQL_TSI_DAY, DAYOFMONTH (CURRENT_DATE) *-1, TIMESTAMPADD (SQL_TSI_MONTH, 1, CURRENT_DATE)))

    This will give you the days for the month in progress (Oct 2011) after calculating the last day of each month... Similary dynamically pass the value Date or month... You will need to modify this function but shud be simple. Hope this helps :)

  • Manage the values of the actual day, month and year

    Hello

    I am trying to enter digital variables the same day (format: 1 / 10), month (format: 1 / 10) and year (format: 1900). I tried to use this sample:

    "< mx:DateFormatter id ="DDformatter"formatString ="DD"/ > "

    "< mx:DateFormatter id ="MMformatter"formatString ="MM"/ >"

    "< mx:DateFormatter id ="YYYYformatter"formatString ="YYYY"/ >"

    In the Script:

    private var actualDate: Date = new Date();

    [Bindable] private var actualDay:String = DDformatter(actualDate) .format.

    [Bindable] private var actualMonth:String = MMformatter(actualDate) .format.

    [Bindable] private var actualYear:String = YYYYformatter(actualDate) .format.

    Part of getting an error when I run my application (am I missing some import?) I would like to have these data in numerical variables:

    #1009 error - cannot access a property or method of a null object reference.

    Pls find the solution of your problem... Let me know if you have any problem.

    MainApplication.mxml

    http://www.Adobe.com/2006/mxml '.

    layout = "absolute" creationComplete = "onCreationComplete ()" > "

    private var actualDate:Date = new Date();

    [Bindable]

    private var actualDay:String;

    [Bindable]

    private var actualMonth:String;

    [Bindable]

    private var actualYear:String;

    private function onCreationComplete():void

    {

    actualDay = DDformatter.format (actualDate);

    actualMonth = MMformatter.format (actualDate);

    actualYear = YYYYformatter.format (actualDate);

    }

    ]]>

    with respect,

    Mayeul Singh Bartwal

  • Calculate the age (months and years) of two dates

    Trying to get the (almost exact) age in years and months to fill in 'Age at the time of retirement' (years1) since the date of birth (DOB1) and the date of their departure in retirement (retireDate1). The only examples that I could find are dates "today." If anyone can help with code? And I understand it works better with JavaScript but FormCalc would also work?

    Dates as DD/MM/YYYY

    Field is num {z9}

    Thank you in advance for your help!

    I could do this work with Age1 as a text field. Of course, you can do whatever you want with it, but this method makes the most sense for me because I can say 99 months "99 years". If you need to separate the year and month in different areas, you should be able to do it easily. Finally, it requires that the user does not manually enter dates. (Something on the raw values isn't quite right when they came from the selection.)

    Age1::calculate (or anywhere where you want this event)

    if (!DOB1.isNull && !retireDate1.isNull){
      var d1 = DOB1.rawValue.split('-');
      var d2 = retireDate1.rawValue.split('-');
      var years = parseInt(d2[0]) - parseInt(d1[0]);
      var months = (parseInt(d2[1]) - parseInt(d1[1]));
      if (parseInt(months) < 0){
        months = 12 + months;
        years--;
      }
      Age1.rawValue = years + " years " + months + " months.";
    }
    
  • How to find the sum of the month and year of a date

    Hi all

    I want to find the sum of the date
    for example, 10 November 2010 I need to find (11-2010).

    Please help me

    You can use the extract function...

    SQL> select extract(month from systimestamp)+extract(year from systimestamp) from dual;
                EXTRACT(MONTHFROMSYSTIMESTAMP)+EXTRACT(YEARFROMSYSTIMESTAMP)
                                        ------------------------------------------------------------
                                                            2021
    

    Concerning
    Renjith Malet

  • get the month and year of date type

    Hi all
    I need to get the month and year of type date.

    For example
    select to_date('2011-01-17', 'yyyy-mm-dd') from dual;
    Required result:
    01-2011
    Any ideas?

    Thanks in advance,
    Bahchevanov.
    select to_char(to_date('2011-01-17', 'yyyy-mm-dd'),'mm-yyyy') from dual;
    

    HTH

  • Get the number of days in a month based on the month and year of fields

    I have a column in my form which lists the days in a month. I want to configure a hidden field that calculates the total number of days in a month, based on the month and year of the field inputs. The number of days will determine what appears on the column. For example, if I put 4 months, and 2016 in the field of the year, I get 30 in the hidden field. Thus, on the column 'Day', I'll have numbers 1-30. Or if I put 2 months and 2016 in the field of the year, I get the 29 in the hidden field. If the numbers 1-29 appears in the column 'day '.

    Found this on some forum javascript code:

    //Month is 1 based
    function daysInMonth(month,year) {
      
    return new Date(year, month, 0).getDate();
    }

    //July
    daysInMonth
    (7,2009); //31
    //February
    daysInMonth
    (2,2009); //28
    daysInMonth
    (2,2008); //29

    I do not know how to convert this code in JavaScript to adobe and don't really know how to use it. All I know how to do is to configure the field values for the field month and year as variables. I am a novice programmer and would appreciate it really all the help I can get. Thank you in advance!

    The code seems to be JavaScript and runs as needed by using the JavaScript console.

    I would like to consider making more general code, so if you have a date string that includes at least the month and year we could just call the function and get the number of days for that month.

    The following script will calculate the number of days in a month, by using at least the month and year values can display the result on the JavaScript console and all of the value field for the field that has this code as the custom calculation Script.

    function daysInMonth (oDate) {}
    return new Date (oDate.getFullYear (), oDate.getMonth () + 1, 0) .getDate ();
    }

    nMonth var = this.getField("Month").valueAsString; get the value of month;
    nYear var = this.getField("Year").valueAsString; get the value of the year;

    Event.Value = "";

    If (nMonth! = "" & nYear!) = "") {}
    var MyDate = util.scand ("' / mm/yyyy ', nMonth +" / "+ nYear); convert to date object;
    var nDaysInMonth = daysInMonth (MyDate); get the number of days;

    Console.Open (); Open the JavaScript console;

    Console.clear(); clear the console;

    Console.println ("Days in" + nMonth + ":" + nDaysInMonth); show days in month;

    Event.Value = nDaysInMonth; Set the value of the field;

    }

  • problem to insert only month and year instead of the full date

    select b.penjara_id, p.penj_lokasi, a.no_daftar, b.episod, b.nama1,to_char(a.trkh_mula_prl,'dd/mm/yyyy') as trkh_mula_prl, to_char(bulan_proses,'mm/yyyy') as bulan_proses,
            b.epd, b.lpd
    from prl_daftar_proses a, senarai_pesalah b, penjara p
    
    where a.no_daftar=b.no_daftar
    and a.episod=b.episod
    and b.penjara_id = p.penjara_id
    and a.setuju_jplp is null
    and a.bulan_proses between to_date(:FROM,'dd/mm/yyyy') and to_date(:TO,'dd/mm/yyyy')
    
    
    order by b.penjara_id, a.bulan_proses,a.no_daftar
    Hi, can someone help me how I can register only the month and year of the value which have full day in the database?

    for example, the date is 18/09/2012, but I want to just insert 09/2012 as a parameter. If I want to insert only one setting, I can do... But I have problem when I want to insert two parameters...

    Lina saleh wrote:
    I already try before that and he invites me error like this...
    "name of the invalid host/identification variable.

    Change the name of the connection variable to: from_date and: to_date

    Is a reserved keyword.

  • to get the month and year separated

    Hello

    I have the entry_date_fin of column (type of data-varchar2 (8))

    with values like Apr.-2008
    Feb-2009 etc.

    can I get the distinct month and year separated
    i tried select to_date(entry_date_fin,'MM') FROM  xyz  doesnt wrk
    kindly guide me

    Although you are (wrongly, IMO) storage of dates as strings, just use string manipulation...

    SQL> with t as (select 'FEB-2008' as txt from dual)
      2  --
      3  select substr(txt,1,3) as mnth
      4        ,substr(txt,5) as yr
      5  from t
      6  /
    
    MNT YR
    --- ----
    FEB 2008
    
    SQL>
    
  • spend months and year in a query

    I created_date in my table... I want to only get the records of a month or a year of records

    How we can write a query to spend months and year to a query

    example is my name of the x table

    Select * from x where trunc (created_date) =?

    Hello

    Rather than convert all DATES in your array to a string and then compare these values to a parameter of sting, it would be more efficient to convert your DATE string parameter and then compare all your DATEs unchanged to her.
    For example, if: year_month is the string "201108', you might say:

    SELECT  *
    FROM    x
    WHERE   created_date >=             TO_DATE (:year_month || '01', 'YYYYMMDD')
    AND     created_date < ADD_MONTHS ( TO_DATE (:year_month || '01', 'YYYYMMDD')
                          , 1
                          )
    ;
    

    I hope that answers your question.
    If not, post a small example of data (CREATE TABLE and INSERT statements) for table x, some values for: year_month, and the desired results for each value of: year_month from these data.
    Always tell what version of Oracle you are using.

  • calculate the day of the year using the date.

    Hi all
    Can calculate us the day of the year using the date form? Is this possible? Please help me thanks in advance
    Like this
    30/08/2009-30/08/2010 after calculation - 365


    Sarah

    Published by: SarahSarahSarah on August 30, 2009 12:49 AM

    Sarah.

    : ins1.noday must be a part of number!

    Create a function in forms like this:

    function get_nodays ( f_dtm_start in date,
                          f_dtm_end   in date ) return number is
    begin
    if
      f_dtm_start is null OR
      f_dtm_end is null
    then
      return ( null );
    end if;
    return ( trunc ( f_dtm_start ) - trunc ( f_dtm_end ) );
    exception when others
    then message ( sqlerrm || ' in function get_nodays occured.' );
    return ( null );
    end;
    

    Call this function in the when-validate-point triggers on ins1. INSPERIOD and: ins1.end love

    :ins1.noday := get_nodays ( :ins1.INSPERIOD, :ins1.end );
    

    It is redundant to have the: noday as a cause of part of database
    the value may by calculated every time using the values INSPERIOD and: end.

  • Today's date in the month and year

    Dear experts,

    I have a year and the number of the day, I wanted to identify the date
    ex: number of days = 203 year = 2009
    Date: 22/07/2009

    Please advice the best way possible to achieve.

    Thank you

    Dear user!

    Please try this code.

    SELECT TO_DATE(2032009, 'DDDYYYY') as dateval
    FROM   dual;
    
    DATEVAL
    -------------------
    22.07.2009 00:00:00
    

    This figure first three are the day number and the last four digits are the year. The DDD format will give you the day and the month as JJ.MM. YYYY format join the year your date. To do this, try:

    SELECT TO_DATE(2032008, 'DDDYYYY') as dateval
    FROM   dual;
    
    DATEVAL
    -------------------
    21.07.2008 00:00:00
    

    Yours sincerely

    Florian W.

    Published by: Florian W. the 22.07.2009 08:40

  • Month and year Validation

    Hi all!

    I want to check if a given date in my form is lower or higher than sysdate...

    I used the coding
    if trim(:empaply.fromdate)<trim(sysdate) then
         message('Check the from date you have given !');
    This condition verifies that the date and not the month and the year...

    So, how can we check the month and the year is less than the current sysdate in sql?

    pls help me with a solution...

    Thanks and greetings
    user 10685325

    "Assuming that" fromdate "is the date data type, then it will simply be.

    if :empaply.fromdate < sysdate then
        message('Check the from date you have given !');
    ....
    

Maybe you are looking for

  • Satellite M50 - 130 - Touch and launch software does not

    Hello I recently had my reinstalled M50 - 130 as he had a huge virus problem and the man who did it, did not reinstall all my drivers and utilities, so I've downloaded from the Toshiba page. Problem I have is that the software ' touch and launch "doe

  • Refresh your wifi Lenovo R500 Intel WiFi Link 5100 in Intel Dual Band Wireless-AC 7260

    Hello Anyone know if it is possible to upgrade your Lenovo R500 Intel WiFi Link 5100 wifi to Intel Dual Band Wireless-AC 7260. Reference to buy: http://www.Intel.com/content/www/us/en/wireless-products/dual-band-wireless-AC-7260-Bluetooth.html A refe

  • TouchSmart HP ENVY 17-j005ea: Factory Reset how long normally take...?

    Hi all. I bought this laptop in 2012 and now it's time to say goodbye to the laptop because I just bought a Pro 3 of Microsoft Surface and flashes of light. Then it is time to back the laptop to factory settings, and I already have an interested buye

  • Latitude E6520 - no Option to turn off Optimus

    Hello I have an older Dell Latitude E6520, that I decided to convert it into a Linux machine. In order to get the nVidia drivers to work correctly, I need to turn off Optimus so that the discrete nVidia card is well accessible. Unfortunately, there i

  • Access list does not work

    unbenannt.PNG I want that no package would leave f0/0 (R2). Here is my configuration: R1: ! interface FastEthernet0/0 IP 192.168.1.1 255.255.255.0 ! R2: ! interface FastEthernet0/0 IP 192.168.1.2 255.255.255.0 IP access-group 101 out ! access-list 10