【问题标题】:SYSDATE minus some date variable returns a different valueSYSDATE 减去某些日期变量会返回不同的值
【发布时间】:2020-06-03 08:34:49
【问题描述】:

我正在使用 Oracle 11g,但在查找两个日期(系统日期)和某个日期变量之间的天数差异时遇到了问题。然后将差值乘以另一个数字。以下是我尝试过但一直返回负值的两种方法。

新分配的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;

【问题讨论】:

  • 从不,永远不要在已经是日期的值上调用 to_date()。这将首先将date 值转换为varchar,然后将varchar 转换回最初的date
  • 感谢您的建议!非常感谢

标签: sql oracle11g


【解决方案1】:

您可以使用我在下面使用的子查询。

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;

【讨论】:

  • 非常感谢,我也发现了错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多