Home > Blockchain >  to get only Tuesdays between the two days in plsql
to get only Tuesdays between the two days in plsql

Time:02-20

how to get only Tuesdays using below query

with range1 as(
select min(active_date) as start_Date
,min(r_date) as end_date,a.id
  from dummy a, dummy1 b
where 
and a.id=b.id group by a.id)
select start_Date level-1 day1,deal_id
from range1
connect by level <=(
trunc(end_Date)-trunc(start_Date) 1)

CodePudding user response:

Here's one option:

SQL> alter session set nls_date_language = 'english';

Session altered.

SQL> alter session set nls_date_format = 'dd.mm.yyyy, fmDay';

Session altered.

SQL> with range (start_date, end_date) as
  2    (select date '2022-02-01',
  3            date '2022-03-01'
  4     from dual
  5    ),
  6  all_days as
  7    (select start_date   level - 1 as datum
  8     from range
  9     connect by level <= end_date - start_date   1
 10    )
 11  select datum
 12  from all_days
 13  where to_char(datum, 'fmDay') = 'Tuesday';

DATUM
---------------------
01.02.2022, Tuesday
08.02.2022, Tuesday
15.02.2022, Tuesday
22.02.2022, Tuesday
01.03.2022, Tuesday

SQL>

CodePudding user response:

Using SYSDATE :-

SELECT * FROM (SELECT TRUNC(SYSDATE,'MM') LEVEL - 1 AS Month_Date, to_char(TRUNC(SYSDATE,'MM') LEVEL - 1,'Day') AS Tue FROM DUAL CONNECT BY TRUNC((TRUNC(SYSDATE,'MM') LEVEL - 1),'MM') = TRUNC(SYSDATE,'MM') ) WHERE trim(Tue) = 'Tuesday';

Using any give date :-

WITH date_range AS ( SELECT TO_DATE('01-03-2022','dd-mm-yyyy') fdt, TO_DATE('31-03-2022','dd-mm-yyyy') ldt from dual ), All_Dates AS (SELECT TRUNC(fdt,'MM') LEVEL -1 AS Month_date , to_char(TRUNC(fdt,'MM') LEVEL - 1,'Day') AS Tue FROM date_range CONNECT BY LEVEL <= ldt - fdt 1 ) SELECT Month_date,Tue FROM All_Dates WHERE trim(TUE) = 'Tuesday';

  • Related