Display the months between two dates
Hello:I need all the months between two dates. I entered two dates as January 15, 2001 and 2011-mar-03. I want the result as below.
JANUARY 15, 2011 - JANUARY 31, 2011
February 1, 2011 - February 28, 2011
MARCH 1, 2011 - MARCH 3, 2011
I held this result of sql query in oracle. Could you please suggest me?
Thanks in advance.
Abhishek
SELECT GREATEST(st, ADD_MONTHS(TRUNC(st, 'MONTH'), (LEVEL - 1))) dt,
LEAST(ed, LAST_DAY(ADD_MONTHS(TRUNC(st, 'MONTH'), (LEVEL - 1)))) ld
FROM (SELECT DATE '2011-01-15' AS st, DATE '2011-03-03' AS ed
FROM DUAL)
CONNECT BY LEVEL <= MONTHS_BETWEEN(TRUNC(ed, 'MONTH'), TRUNC(st, 'MONTH')) + 1
ORDER BY 1;
DT LD
------------------------ ------------------------
15.01.2011 00:00:00 31.01.2011 00:00:00
01.02.2011 00:00:00 28.02.2011 00:00:00
01.03.2011 00:00:00 03.03.2011 00:00:00
HTH, Urs
Tags: Database
Similar Questions
-
How to find the difference between two dates in the presentation layer
Hi gurus,
Hello to everyone. Today, I came with the new requirement.
I need to know the difference between a date and the current date in the formula column application presentation layer.by.
Thank you and best regards,
PratesHi Navin,
TIMESTAMPDIFF function first determines the timestamp component that corresponds to the specified interval setting. For example, SQL_TSI_DAY corresponds to the day component and SQL_TSI_MONTH corresponds to the component "month".
If you want to display the difference between two dates in days using SQL_TSI_DAY, unlike butterflies SQL_TSI_MONTH and so on...
hope you understand...
Award points and to close the debate, if your question is answered.
See you soon,.
Aravind -
get all the date of end of months between two dates
Hi all, I'll try to find together the date of end of months between two dates.
I have the following data in a table
WITH AS's Data1
(
SELECT To_Date('4/30/2009','mm/dd/yyyy') dt, 'TEST' lname FROM dual UNION ALL
SELECT To_Date('5/01/2009','mm/dd/yyyy') dt, "TEST2" lname FROM dual UNION all
SELECT To_Date('5/02/2009','mm/dd/yyyy') dt, "TEST3" lname FROM dual UNION all
SELECT To_Date('5/03/2009','mm/dd/yyyy') dt, "TEST4" lname FROM dual UNION all
SELECT To_Date('5/04/2009','mm/dd/yyyy') dt, "TEST5" lname FROM dual UNION all
SELECT To_Date('5/05/2009','mm/dd/yyyy') dt, "TEST6" lname FROM dual UNION ALL
SELECT To_Date('5/31/2009','mm/dd/yyyy') dt, 'TEST7' lname FROM dual UNION all
SELECT To_Date('6/01/2009','mm/dd/yyyy') dt, 'TEST' lname FROM dual
)
I would like to write an application that gives you all the end date for months between two dates
for example, if you give the date 9/1/4 and 5/6/9, the output should be
IF I give you the dates 01/04/09 AND 01/06/09, THEN output should beDT LNAME ------------------- 4/30/2009 TEST
as you can see, I want all the end dates of months between two dates by giving the output.DT LNAME ------------------- 4/30/2009 TEST 5/31/2009 TEST7
If I give you 06/05/09 and 05/06/09, and then does so no output because there is no end of month between these two dates.
Similarly, if I give you 30/04/09 and 30/04/09 then output should be 30/04/09 because it is an end of month date
anyone can help to write a query. Thank you very muchJin
Not sure if you need subquery, analytical functions for this.
According to me, which should solve your purpose.WITH data1 AS ( SELECT To_Date('4/30/2009','mm/dd/yyyy') dt, 'TEST' lname FROM dual UNION ALL SELECT To_Date('5/01/2009','mm/dd/yyyy') dt, 'TEST2' lname FROM dual UNION all SELECT To_Date('5/02/2009','mm/dd/yyyy') dt, 'TEST3' lname FROM dual UNION all SELECT To_Date('5/03/2009','mm/dd/yyyy') dt, 'TEST4' lname FROM dual UNION all SELECT To_Date('5/04/2009','mm/dd/yyyy') dt, 'TEST5' lname FROM dual UNION all SELECT To_Date('5/05/2009','mm/dd/yyyy') dt, 'TEST6' lname FROM dual UNION ALL SELECT To_Date('5/31/2009','mm/dd/yyyy') dt, 'TEST7' lname FROM dual UNION all SELECT To_Date('6/01/2009','mm/dd/yyyy') dt, 'TEST' lname FROM dual ) select distinct last_day(dt) dt,lname from data1 where dt between &start_date and &end_date and last_day(dt) <= &end_date
also, i have another request. how would i do this without using the data i provided. lets say, i tell you, give me alll the months end between two dates using dual in the from clause of a query. how would you do this in a query or pl/sql? thanks again
Can be like that
with data1 as( select &start_date+level-1 dt from dual connect by level <= &end_date-&start_date+1) select distinct last_day(dt) from data1 where dt between &start_date and &end_date and last_day(dt) <= &end_date order by last_day(dt)
See you soon!
BobinPublished by: Buga added query for updated the need
-
Hello
I have two dates. start date and end date.
I want to extract months between two dates
months should be as
JAN
FEB
MAR
for example.
Start - 1-jan-2014
date of end - 31 - dec - 2014
How can I do this?
Thanks and greetings
CORINE
You should always use the function MONTHS_BETWEEN...
for example
SQL > ed
A written file afiedt.buf1 with t as (select date '' 2014-01-01 as start_date date ' 2014-12-31' as double end_date)
2 --
3 end of test data
4 --
5. Select to_char (add_months (start_date, rownum-1), 'My') by month
6 t
7 * connect by rownum<=>=>
SQL > /.LUN
---
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Ms
Oct
Nov
Dec12 selected lines.
And if you want that they display, separated by commas...
SQL > ed
A written file afiedt.buf1 with t as (select date '' 2014-01-01 as start_date date ' 2014-12-31' as double end_date)
2 --
3 end of test data
4 --
5 Select listagg (to_char (add_months (start_date, rownum-1), 'My'), ',') group by month (order by rownum)
6 t
7 * connect by rownum<=>=>
SQL > /.MONTH
-----------------------------------------------------------------------------------------------------------------
Jan, Feb, Mar, Apr, may, June, July, August, Sept, Oct, Nov, Dec -
Calculate the hours between two dates
Hello
I have a requirement to count the hours with 2 given timestamps, something like:
However, I wish it would be that simple. I just need to count the hours between two timestamps for the hours of work for example, 08:00 - 17:00, MONDAY to Friday (excluding weekends).SQL> select ((to_date('22-oct-2012 13:00:00','dd-mon-yyyy hh24:mi:ss') - to_date('20-oct-2012 13:00:00','dd-mon-yyyy hh24:mi:ss'))*24) B from dual ; B ---------- 48
So lets say I have to count the hours between two dates above the result should be 18 hours not 48 (4 hours on 20/oct, 9 hours on 21/oct to 5 hours 22/oct).
How can I achieve this? Any idea will be useful.
Thank youMy query generates a list of all the hours between the start and end time, filters on the hours that are outside of the hours of work and then account for the remaining lines. Change that to partial hours must just be a case of replace the two occurrences of 1/24 with 24/01/60, then - as say you - Division COUNT (*) by 60.
There may be performance issues using techniques of generation of line like this, if you put this in a query involving the joining of several lines of other tables (for example where the dates of beginning and end are derived from several employees?) or in several days. If you don't find it then count the number of whole days (taking weekends into account) between dates and work on the partial days after that it could be better. This would probably involve a lot of statements of case (which I don't have time to test it now).
Ben
-
Dynamic action - Get the difference between two dates + times
I have problems a little dynamic to work action. I'm trying to get the time between two dates with the time difference.
Here is what I got (this is apex 4.0):
Two date pickers + two numbers fields (date/start/end times)
I created a dynamic action on the page who fires on the point lose focus (above points).
The real action for the DA is the body of the PL/SQL function:
When I change the values on the page, I get the following error:declare end_date DATE; start_date DATE; Begin start_date := to_char(:P1_START_DATE || ' ' || :P1_START_TIME, 'DD-MON-YYYY HH:MIAM'); end_date := to_char(:P1_END_DATE || ' ' || :P1_END_TIME, 'DD-MON-YYYY HH:MIAM'); :P1_HOURS := end_date-start_date; End;
AJAX call back Server error ORA-06502: PL/SQL: digital or value error: character number conversion error to set the value.
I'm guessing that there is a problem with the date formatting, but I can't make it work. Thanks in advance!Hi djston,
because you chose the dynamic action of 'Set value' with the "Body of the PL/SQL function" type you need to return the value. Try the following code
declare end_date DATE; start_date DATE; Begin start_date := to_date(:P1_START_DATE || ' ' || :P1_START_TIME, 'DD-MM-YYYY HH:MIAM'); end_date := to_date(:P1_END_DATE || ' ' || :P1_END_TIME, 'DD-MM-YYYY HH:MIAM'); RETURN (end_date-start_date)*24; End;
and P1_REQUESTED_HOURS like 'item affected. "
Concerning
Patrick
-----------
My Blog: http://www.inside-oracle-apex.com
APEX 4.0 Plug-Ins: http://apex.oracle.com/plugins
Twitter: http://www.twitter.com/patrickwolfPublished by: Patrick Wolf on January 17, 2011 10:54
-
Find the difference between two date and time
Hi friends,
I wanted to find the difference between two date and time, but my qury is slightest error "invalid number."
select sql_step_num,proc_name,run_seqno,start_date,end_date,(to_char(start_date,'HH24-MI-SS') - to_char(end_date,'HH24-MI-SS') ) as ed from eval.EVAL_RUNTIME_DETAILS where trunc(start_date) = trunc(sysdate) order by sql_step_num;
You try to get the feel between two char strings.
And more difference between two dates gives a NUMBER of days.
Try this:select sql_step_num,proc_name,run_seqno,start_date,end_date,numtodsinterval(end_date-start_date,'DAY') as ed from eval.EVAL_RUNTIME_DETAILS where trunc(start_date) = trunc(sysdate) order by sql_step_num;
-
Select the mountains between two dates
Hi all
How can I select all months between two dates. For example, if two dates are say 2008-05-25 and 2009-07-15, then I need following output
May-2008
June-2008
July-2008
August-2008
September-2008
October-2008
November-2008
December-2008
January-2009
February-2009
March-2009
April-2008
May-2009
-June 2009
July-2009
Thank you
SujnanTry this one
SQL> SELECT TO_CHAR(add_months(TRUNC(to_date('25/05/2008','DD/MM/YYYY'),'MM') ,(level-1)),'fmMonth-YYYY') 2 FROM dual 3 CONNECT BY level <= months_between(to_date('15/07/2009','DD/MM/YYYY'),to_date('25/05/2008','DD/MM/YYYY')) + 2; TO_CHAR(ADD_MO -------------- May-2008 June-2008 July-2008 August-2008 September-2008 October-2008 November-2008 December-2008 January-2009 February-2009 March-2009 TO_CHAR(ADD_MO -------------- April-2009 May-2009 June-2009 July-2009 15 rows selected. SQL>
-
Need help on the list of months between two Dates
Hi all
I have a table which has startdate and enddate and need a select to list all the months between these two dates for each given ID.
I did some tests and could not figure out how to get the startdate and enddate table (instead of hard coding) tests in the select statement.
Could someone please help on this (Oracle 11 g 2),
Thanks in advance!
create table testing( id number, start_date date, end_date date); insert into testing values(100, to_date('05-FEB-2011', 'DD-MON-YYYY'), to_date('28-MAY-2011', 'DD-MON-YYYY')); insert into testing values(200, to_date('20-JUN-2011', 'DD-MON-YYYY'), to_date('28-DEC-2011', 'DD-MON-YYYY')); commit; select * from testing; ID START_DAT END_DATE ---------- --------- --------- 100 05-FEB-11 28-MAY-11 200 20-JUN-11 28-DEC-11 Elapsed: 00:00:00.01 *for testing.id = 100:* select to_char(add_months(to_date('05-FEB-2011', 'DD-MON-YYYY'), l - 1), 'YYYY-Mon') Dates from (select level l from dual connect by level <= months_between(trunc(to_date('28-MAY-2011', 'DD-MON-YYYY'), 'MONTH'), trunc(to_date('05-FEB-2011', 'DD-MON-YYYY'), 'MONTH')) + 1); DATES ----------------- 2011-Feb 2011-Mar 2011-Apr 2011-May Elapsed: 00:00:00.01 *for testing.id = 200:* select to_char(add_months(to_date('20-JUN-2011', 'DD-MON-YYYY'), l - 1), 'YYYY-Mon') Dates from (select level l from dual connect by level <= months_between(trunc(to_date('28-DEC-2011', 'DD-MON-YYYY'), 'MONTH'), trunc(to_date('20-JUN-2011', 'DD-MON-YYYY'), 'MONTH')) + 1); DATES ----------------- 2011-Jun 2011-Jul 2011-Aug 2011-Sep 2011-Oct 2011-Nov 2011-Dec 7 rows selected.
SQL> select * from testing 2 / ID START_DAT END_DATE ---------- --------- --------- 100 05-FEB-11 28-MAY-11 200 20-JUN-11 28-DEC-11 SQL> select id, 2 to_char(add_months(start_date,column_value - 1),'YYYY-Mon') dates 3 from testing, 4 table( 5 cast( 6 multiset( 7 select level 8 from dual 9 connect by add_months(trunc(start_date,'MM'),level - 1) <= end_date 10 ) 11 as sys.OdciNumberList 12 ) 13 ) 14 order by id, 15 column_value 16 / ID DATES ---------- -------- 100 2011-Feb 100 2011-Mar 100 2011-Apr 100 2011-May 200 2011-Jun 200 2011-Jul 200 2011-Aug 200 2011-Sep 200 2011-Oct 200 2011-Nov 200 2011-Dec 11 rows selected. SQL>
SY.
-
Need to query to find missing months between two dates.
A bank customer a monthly overview of databases (in the tens of millions of accounts)
The data are sent with a line per account each month. It is stored in a table called "ACCOUNTS_TAB".
Fields on registration, which
Column
Description
Example of format.
* YRMTH-1
Year and month of the snapshot
6-character numeric, 4-digit year added to months of 2 digits, example 201301, 201311
* AccountID
Unique identifier for an account.
Integer, example 100098322
Opening balance - 1
Initial account balance at the closing of the previous month
$30000
Closing balance - 1
The account balance at the end of the month of closing
$34200
Class-1 relative to investments
.....
...
.....
......
.....
Many more columns, two favorites (*) columns are alone, that you will need for the query. There are no columns to tell when an account is closed, or has just opened, and not separate "master account" - you use this single table for your query that results.
The table was in place from 200301, so many accounts have dozens of lines, if they have been open for many years and other only 1 or 2 ranks, if new.
Write a query to give just a list of accountDs that meet the following criteria.
- 1) has a record for specific 201503
- 2) was also a record for the month specific 201602
- 3) missing one or several months between these two records.
A good account which was opened from 201503 to 201602 inclusive would of course have lines for
201503
201504
201505
201506
201507
201508
201509
201510
201511
201512
201601
201602
It's good to hardcode the month of departure (201503), end of month (201602) and the actual number of months between them (10 exclusive or 12 inclusive) as part of your query.
Once again the account must meet all 3 criteria to be an account issue. If only, they have a partial set of these documents but do not have the month of departure, or is not the end of the month, it is not a problem, only when they have so specified and end early and not a full between game.
Help, please!
Maybe this...
-----
-The Dataset for the test begins
WITH dataset (ACCOUNT_NO, DATES)
AS (SELECT 100, DOUBLE 201503
UNION ALL
SELECT 100, DOUBLE 201504
UNION ALL
SELECT 100, DOUBLE 201505
UNION ALL
SELECT 100, DOUBLE 201506
UNION ALL
SELECT 100, DOUBLE 201507
UNION ALL
SELECT 100, DOUBLE 201508
UNION ALL
SELECT 100, 201509 OF THE DOUBLE
UNION ALL
SELECT 100, DOUBLE 201510
UNION ALL
SELECT 100, 201511 OF THE DOUBLE
UNION ALL
SELECT 100, DOUBLE 201512
UNION ALL
SELECT 100, 201601 DOUBLE
UNION ALL
SELECT 100, DOUBLE 201602
UNION ALL
SELECT 200, DOUBLE 201503
UNION ALL
SELECT 200, DOUBLE 201504
UNION ALL
SELECT 200, DOUBLE 201505
UNION ALL
SELECT 200, DOUBLE 201506
UNION ALL
SELECT 200, DOUBLE 201508
UNION ALL
SELECT 200, DOUBLE 201509
UNION ALL
SELECT 200, DOUBLE 201510
UNION ALL
SELECT 200, DOUBLE 201511
UNION ALL
SELECT 200, DOUBLE 201512
UNION ALL
SELECT 200, 201601 DOUBLE
UNION ALL
SELECT 200, DOUBLE 201602
UNION ALL
SELECT 300, DOUBLE 201503
UNION ALL
SELECT 300, DOUBLE 201504
UNION ALL
SELECT 300, DOUBLE 201505
UNION ALL
SELECT 300, DOUBLE 201506
UNION ALL
SELECT 300, DOUBLE 201507
UNION ALL
SELECT 300, DOUBLE 201508
UNION ALL
SELECT 300, DOUBLE 201509
UNION ALL
SELECT 300, DOUBLE 201510
UNION ALL
SELECT 300, DOUBLE 201511
UNION ALL
SELECT 300, 201601 DOUBLE
UNION ALL
SELECT 300, DOUBLE 201602
UNION ALL
SELECT 400, DOUBLE 201504
UNION ALL
SELECT 400, DOUBLE 201505
UNION ALL
SELECT 400, DOUBLE 201506
UNION ALL
SELECT 400, DOUBLE 201507
UNION ALL
SELECT 400, 201508 DOUBLE),
-The Dataset to test ends
-Hand with clause begins
ResultSet
AS (SELECT account_no,
CASE
WHEN COUNT)
CASE WHEN dates IN (201503, 201602) THEN 1 END)
COURSES (PARTITION BY account_no) = 2
AND (COUNT (DISTINCT SUBSTR (dates, 4)))
COURSES (PARTITION BY account_no) = 12
OR COUNT (DISTINCT SUBSTR (dates, 4))
COURSES (PARTITION BY account_no)<>
AND COUNT (DISTINCT SUBSTR (dates, 1, 4))
(PARTITION BY account_no) > 1
THEN
« Y »
ON THE OTHER
« N »
END
FLG
THE dataset---> replace with your table name
GROUP BY account_no, dates)
SELECT DISTINCT Account_no
FROM THE result set
WHERE flg = 'Y ';
-Hand with the ends of the clause
ACCOUNT_NO
-----------------------
100
300
200
See you soon,.
Manik.
-
Formula to determine if a specific day of the week between two dates?
I am creating a spreadsheet to track my time PD & holiday. I usually work weekends, and my vacation allowance includes a specific maximum number of Sundays a year. Is there a way to calculate how much Sunday fall between a date range (or any day of the week, by the way)?
(i.e. If my vacation starts February 1, 2016 and ends March 2, 2016, Sunday how are included?)
I know that I can calculate how many weeks have passed, using = Quotient (DateDiff (Start_Date, End_Date), 7), but it is possible to include two Sundays in a period of 7 days.
Hi Eric,.
Here is one approach.
C2 = A2 + (7−WEEKDAY(A2,2))
This concludes the first Sunday following the start date.
D2 = STRIPDURATION ((B2−C2) ÷7)
I formatted this column without decimal places to see full weeks of the first numbers Sunday.
Quinn
-
counting the days between two dates
I have 3 columns in my table
date of purchase date sold days
computer 24 April 09-11 May 09
How can I write that a sql statement will help me to create a new column days and days between date bought and sold
Thank you872959 wrote:
I have 3 columns in my tabledate of purchase date sold days
computer 24 April 09-11 May 09How can I write that a sql statement will help me to create a new column days and days between date bought and sold
Thank you
just subtract two dates & the difference will be in units of days
SQL > select to_date('11-MAY-09','DD-MON-YY') - double TO_DATE('24-APR-09','DD-MON-YY');
TO_DATE('11-MAY-09','DD-MON-YY')-TO_DATE('24-APR-09','DD-MON-YY')
-----------------------------------------------------------------
17Published by: sb92075 on July 19, 2011 10:26
-
How to tell the difference between two dates
Hello:
I have a question on how to get the difference in quantities for two dates in the replies and dashboard.
This is the scenario. I have two guests date and three columns. The first column must be the sum of the amounts for the first quick date. The second column should be the sum of the amounts for the second fast date. And the third column is the difference between the first two columns.
Basically, I'm trying to do something similar to a function of sum of two lines but trying to get the difference between the two rows. Any help to solve this problem would be appreciated.Use the COLUMN FILTERS level...
the first column with the first variable of date quick presentation of the filter
Similarly, the second column in the second variable of quick overview of date filter
Kind regards
Rambeau -
Excerpt from the hours between two dates
Hello
This is the value stored in the table of my database.
I want to extract betwwen hours two dates. How can I extract it.
I try to run like this
Select to_timestamp('27-JAN-14 05.30.00.000000 PM')-to_timestamp('26-JAN-13 08.20.00.000000 PM') double, but it gives the answer as the format 21:10:00.000000000 + 000000365
I want simple hours, minutes, and seconds
What is the format of this value as "dd-MON-yy."
27 JANUARY 14 01.30.00.000000 PM
26 JANUARY 14 06.22.32.170033 PM
Use the Extract function. Like this.
() AS T1 (C1)
Select to_timestamp('27-JAN-14 05.30.00.000000 PM')-to_timestamp('26-JAN-13 08.20.00.000000 PM') of double)
SELECT EXTRACT (DAY OF C1) | ' DAYS '.
EXTRACT (HOUR OF C1) | ' HOURS '.
EXTRACT (MINUTE OF C1) | ' MINUTES '.
EXTRACT (SECOND C1) | ' SECONDS
FROM T1;
OUTPUT:
365 DAYS 21 HOURS 10 MINUTES 0 SECONDS
If not try it.
SELECT EXTRACT (DAY OF to_timestamp('27-JAN-14 05.30.00.000000 PM')-to_timestamp('26-JAN-13 08.20.00.000000 PM')) | ' DAYS '.
EXTRACT (HOUR FROM to_timestamp('27-JAN-14 05.30.00.000000 PM')-to_timestamp('26-JAN-13 08.20.00.000000 PM')) | ' HOURS '.
EXTRACT (to_timestamp('27-JAN-14 05.30.00.000000 PM')-to_timestamp('26-JAN-13 08.20.00.000000 PM') MINUTE) | ' MINUTES '.
EXCERPT ((SECOND from to_timestamp('27-JAN-14 05.30.00.000000 PM')-to_timestamp('26-JAN-13 08.20.00.000000 PM')) |) ' SECONDS
DOUBLE;
Post edited by: Parth272025
-
How to find the difference between two dates in time except Sunday
Hi all
I have a table, as shown below.
I would like to know the difference between same tr_ids create_time, which should give out in hours except Sunday.SQL> select * from test; TR_ID CREATE_TIME CODE -------------------------------------------------- --------------------------------------------------------------------------- ---------- S12341 05-JUN-12 12.20.52.403000 AM 1003 S12342 11-JUN-12 11.15.33.182000 AM 1003 S12342 07-JUN-12 12.00.36.573000 PM 1002 S12343 20-JUN-12 12.34.37.102000 AM 1003 S12343 15-JUN-12 11.34.27.141000 PM 1002 S12344 01-JUL-12 10.01.06.657000 PM 1002 S12344 06-JUL-12 12.01.04.188000 AM 1003 S12341 31-MAY-12 11.20.38.529000 PM 1002
For example:
TR_ID: S12344
1002_Create_time: July 1, 12 PM 10.01.06.657000 (i.e. Sunday)
1003_Create_time: 12.01.04.188000 AM 6 July 12
1002 create time is 22:00 Sunday.
If the query must exclude only the hours of Sunday which is 10 p.m. to Monday 00 h which is 2 Hrs.
I tried the sub query after doing a search on this forum but I am not getting the desired output.
Need help to get the desired o/pSELECT count(*) FROM (SELECT ROWNUM RNUM,tr_id,create_time CT_1002 FROM test c WHERE c.tr_id='S12344' and ROWNUM <= (select (cast(a.create_time as date)-cast((select create_time from test b where a.tr_id=b.tr_id and code=1002) as date)) from test a where a.code=1003 and a.tr_id=c.tr_id) + 1) d WHERE to_char(cast((select create_time from test e where e.tr_id=d.tr_id and code=1002) as date) + RNUM - 1, 'DY') NOT IN('SUN');
Hello
If I unederstand the problem correctly, that's what you want:
WITH got_extrema AS ( SELECT tr_id , CAST (MIN (create_time) AS DATE) AS start_date , CAST (MAX (create_time) AS DATE) AS end_date FROM test GROUP BY tr_id ) SELECT tr_id , start_date, end_date -- If wanted , 24 * ( ( ( TRUNC (end_date, 'IW') -- Count -1 day for every full week - TRUNC (start_date, 'IW') ) / -7 ) + LEAST ( end_date -- If end_date is a Sunday , TRUNC (end_date, 'IW') + 6 -- consider it 00:00:00 on Sunday ) - CASE WHEN start_date >= TRUNC (start_date, 'IW') + 6 -- If start_date is a Sunday THEN TRUNC (start_date, 'IW') + 6 -- consider it 00:00:00 Sunday ELSE start_date END ) AS total_hours FROM got_extrema ;
I guess that you don't need to worry about fractions of a second. As you did in the code you have posted, I am to convert the TIMESTAMP to date values, because of DATE arithmetic and functions are so much better than what is available for timestamps.
Basically, it's just to find the number of days between start_date and end_date and multiplying by 24, with these twists:
(a) 1 day is deducted for each week between start_date and end_date
(b) if End_date is a Sunday, none of the end_date himself hours are counted
(c) If start_date is a Sunday, then all the start_date himself hours are counted. Why these hours should be counted? Because 1 day is already being deducted for the week which includes start_date, which contains only this Sunday.TRUNC (dt, 'IW') is the beginning of the ISO week containing dt; in other words, 00:00:00 the or before the dt last Monday. This is not the NLS parameters.
Of course, I can't test without some sample data and the exact results you want from these data. You may need a little something more If start_date and end_date are both on the same Sunday.
Whenever you have a problem, please post a small example of data (CREATE TABLE and only relevant columns, INSERT statements) of all of the tables involved.
Also post the results you want from this data, as well as an explanation of how you get these results from these data, with specific examples.
Always tell what version of Oracle you are using.
See the FAQ forum {message identifier: = 9360002}
Maybe you are looking for
-
Update ios 9.3 I can't unlock my iphone
ไม่สามารถเปิดใช้งาน iphone ของคุณเนื่องจากเซิร์ฟเวอร์ที่ทำการเปิดให้ใช้ไม่พร้อมใช้งานชั่วคราว
-
I have not used a front Source control provider. My hope is that I don't have to deal with a large learning curve in using the basic features of a source control provider. Also curious is the most popular provider used by LabVIEW developers. Thank y
-
search string in a vi within a llb
Hi all I am looking for a string in a vi / vi within a law degree, I looked online and only the search-for-vi-name is possible. I read on the help files, but I don't really understand what I am supposed to do so can someone please let me know if ther
-
MY temp folder keeps filling continuously
Hello This leads me to madness - my windows temp folder continues to fill with tons of files - they amount to more than 40 GB in a single session on the computer - in addition they remove themselves to restarting the pc. Can anyone help? I have no id
-
Printer Officejet Pro 8610: Officejet Pro 8610 prints on glossy paper matte finish
When I load 4 x 6 HP Premium glossy photo paper, my printer prints a Matt finish on my photos. How can I get it to print on glossy photo paper brilliant finishes?