Можете ли вы сказать мне значение fromdate-0.0142 в оракуле? - PullRequest
0 голосов
/ 04 июня 2019
select 
id_no, nvl(OD_PLACECODE,-1) OD_PLACECODE, nvl(PURPOSECODE,-1) PURPOSECODE
from tonduty
where
to_date(sysdate,'dd-mon-yy hh24:mi:ss') between fromdate-0.0142 and 
todate 
and
actinact =1;

Подскажите, пожалуйста, значение fromdate-0.0142 в приведенном выше запросе.

Пожалуйста, найдите пример данных в поле fromdate.

01-06-2019 09:00:00
04-06-2019 08:00:00
01-06-2019 09:00:00
04-06-2019 10:00:00

fromdate тип данных DATE в Oracle.

Любая помощь будет оценена.

Это не домашняя работа. Я объясню вам ясно.

В нашем офисе действует система посещаемости (сотрудник должен смахивать удостоверение личности при входе и выходе из офиса).

Если кто-то хочет выйти на офисную работу (при исполнении служебных обязанностей), он должен подать заявку на OD. Мы сохраним эту информацию в ONDUTY Таблице при подаче заявки на OD. после подачи заявки они будут считывать удостоверение личности (в программном обеспечении мы будем проверять, подал ли этот сотрудник заявку на OD, если да, мы будем рассматривать его как OD OUT. Если не подали заявку на OD, мы будем рассматривать его как OUT.)

В этой проверке мы написали этот запрос.

1 Ответ

2 голосов
/ 04 июня 2019

В арифметике даты мы вычитаем число дней из некоторой даты. Это означает следующее:

SQL> select 0.0142 days,
  2         0.0142 * 24 hours,
  3         0.0142 * 24 * 60 minutes
  4  from dual;

      DAYS      HOURS    MINUTES
---------- ---------- ----------
     ,0142      ,3408     20,448

SQL>

Как видите, 0,0142 не является хорошим числом; это составляет 20 минут (и 26,88 секунды, как 0,448 * 60 = 26,88).

Почему это вычитается из значения даты, я понятия не имею.

На основании вашего комментария (разрешив 20 минут): спросите автора (этого кода), почему они тогда не использовали 20 минут, а 20,448? Вот как это сделать:

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> select sysdate,
  2         sysdate - 20 / (24 * 60) twenty_minutes_ago
  3  from dual;

SYSDATE             TWENTY_MINUTES_AGO
------------------- -------------------
05.06.2019 11:21:10 05.06.2019 11:01:10

20 минут - 0.013888889, а не 0.0142.

SQL> select 20 / (24 * 60) twenty_minutes
  2  from dual;

TWENTY_MINUTES
--------------
    ,013888889

SQL>

, что означает, что ваш код должен был быть

between fromdate - 0.01389 and todate 

или, еще лучше

between fromdate - (20 / (24 * 60)) and todate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...