SYSDATE минус некоторая переменная даты возвращает другое значение - PullRequest
1 голос
/ 19 февраля 2020

Я использую Oracle 11g и у меня проблема с поиском разницы дней между двумя датами - (Sysdate) и некоторой переменной даты. Тогда разница будет умножена на другое число. Ниже приведены два метода, которые я пробовал, но продолжал возвращать отрицательное значение.

Вновь назначенная переменная return_date имеет правильное значение.

Заранее спасибо за помощь!

UPDATE borrowed_books
    SET penalty_fine = (TO_DATE(sysdate, 'dd-mm-yyyy') - TO_DATE(return_date, 'dd-mm-yyyy')) * 20,
        return_date = SYSDATE
        WHERE patron_id = patID AND
              transaction_id = transID;
UPDATE borrowed_books
       SET penalty_fine = (sysdate - return_date) * 20,
           return_date = SYSDATE
           WHERE patron_id = patID AND
                 transaction_id = transID;

1 Ответ

1 голос
/ 19 февраля 2020

Вы можете использовать подзапрос, как я использовал ниже.

CREATE TABLE BORROWED_BOOKS
AS
SELECT 5 PENALTY_FINE,TO_DATE('19000101','YYYYMMDD') RETURN_DATE,1 
PATRON_ID,78 TRANSACTION_ID FROM DUAL
UNION ALL
SELECT 4 PENALTY_FINE,TO_DATE('19000101','YYYYMMDD') RETURN_DATE,2 
PATRON_ID,79 TRANSACTION_ID FROM DUAL
UNION ALL
SELECT 3 PENALTY_FINE,TO_DATE('19000101','YYYYMMDD') RETURN_DATE,3 
PATRON_ID,80 TRANSACTION_ID FROM DUAL  

UPDATE BORROWED_BOOKS
   SET PENALTY_FINE =
        (SELECT (SYSDATE - RETURN_DATE)* 20
           FROM BORROWED_BOOKS
          WHERE PATRON_ID = 1 AND TRANSACTION_ID = 78)
      ,
   RETURN_DATE = SYSDATE
 WHERE PATRON_ID = 1 AND TRANSACTION_ID = 78;

COMMIT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...