Skip to content
Advertisement

choose from a time period oracle sql

I have timestamp date format in column FIRST_DATE and i need to choose time period from a certain hour, for ex. all from 18:00 10.05.21 to 18:00 11.05.2021

the problem is that date column in timestamp format – FIRST_DATE: 10/05/2020 0:00:03,000000 TIMESTAMP(6)

so i tried to use it:

select
count(*)
from TABLE
where to_char(FIRST_DATE, 'HH24:MI')>='18:00'

so with this way i was able to limit the start period by time, but if i add date to this my conditions stop working

and to_char(FIRST_DATE, 'DD-MON-YY')>='10-MAY-21'

how can i correct my script to select all from 18:00 10.05.21 to 18:00 11.05.2021

Advertisement

Answer

Don’t compare dates (or timestamps) with strings. '18:00' and '10-MAY-21' are strings. Use TO_TIMESTAMP with appropriate format mask, e.g. (lines #5 and 6):

SQL> with test (first_date) as
  2    (select to_timestamp('10/05/2020 23:00:03,000000', 'dd/mm/yyyy hh24:mi:ss,ff3') from dual)
  3  select *
  4  from test
  5  where first_date between to_timestamp('10/05/2020 18:00:00,000000', 'dd/mm/yyyy hh24:mi:ss,ff3')
  6                       and to_timestamp('11/05/2020 18:00:00,000000', 'dd/mm/yyyy hh24:mi:ss,ff3')
  7  /

FIRST_DATE
---------------------------------------------------------------------------
10.05.20 23:00:03,000000000

SQL>
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement