Помощь с запросом Sql для сравнения строки (HH24MI) на сегодняшний день - PullRequest
2 голосов
/ 02 августа 2011

У нас есть таблица конфигурации, как показано ниже, в которой хранятся время начала и продолжительность.Если время начала 9:20 вечера (3-е) добавить продолжительность, то время становится 9:35.Я должен выяснить, находится ли текущее время между какими-либо значениями.Я должен вернуть вывод на основе start_time и продолжительности.т.е. текущее время должно быть между start_time и start_time + длительностью.(между 09:20 и 09:35) Можете ли вы помочь мне с SQL-запросом или лучше, если мы пойдем с SQL-функцией?

Start_time, duration(minutes)   output

1108                 5            2

1054                100           5

2120                15            8

Ответы [ 2 ]

4 голосов
/ 02 августа 2011

Я не фанат хранения дат и времени в столбцах VARCHAR2. START_TIME действительно должен быть столбцом DATE или TIMESTAMP.

Тем не менее, вы можете сделать что-то вроде

 with x as (
   select '1108' start_time, 5 duration, 2 output from dual
   union all
   select '1054', 100, 5 from dual
   union all
   select '2120', 15, 8 from dual
 )
 select *
   from (
     select to_date(
               to_char(sysdate,'YYYY-MM-DD') || ' ' ||
                 start_time,
               'YYYY-MM-DD HH24MI' ) start_date,
            to_date(
               to_char(sysdate,'YYYY-MM-DD') || ' ' ||
                 start_time,
               'YYYY-MM-DD HH24MI' ) + duration/24/60 end_date
   from x)
  where sysdate between start_date and end_date
1 голос
/ 02 августа 2011

Далее выбираются все строки, в которых sysdate находится в пределах Start_Time и Start_Time + duration (отредактировано согласно комментарию от OP):

SELECT (TRUNC ( SYSDATE ) + TO_NUMBER ( SUBSTR ( Start_Time, 0, 2 ) ) / 24.0 + TO_NUMBER ( SUBSTR ( Start_Time, 3 ) ) / (24.0 * 60.0))  start_date, (TRUNC ( SYSDATE ) + TO_NUMBER ( SUBSTR ( Start_Time, 0, 2 ) ) / 24.0 + TO_NUMBER ( SUBSTR ( Start_Time, 3 ) ) / (24.0 * 60.0) + TO_NUMBER (duration))  end_date FROM configtable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...