【问题标题】:Incrementing on Date based on another field SQL基于另一个字段 SQL 在日期上递增
【发布时间】:2022-01-18 15:56:24
【问题描述】:

如何使用日期,所以我可以使用天数将该数字添加到另一个日期

例如,我需要将 Loan_period 中包含的每个数字增加 1 天到 Loan_Date,结果应该在 Return_Date 中

CREATE TABLE Book
  (
    Resource_ID INT PRIMARY KEY,
    Title VARCHAR2(40) NOT NULL,
    Loan_Period int (40) NOT NULL,
    noTimesLoaned int NOT NULL
  );

CREATE TABLE Loan
  (
    Loan_No   INT PRIMARY KEY,
    Loan_Date DATE NOT NULL,
    Return_Date DATE,
    Resource_ID INT NOT NULL,


  );

谢谢

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    样本数据肯定会有所帮助,但是 - 在日期算术中,在 Oracle 中,一个简单的date datatype value + number 会导致添加到该日期的天数。例如:

    SQL> select sysdate right_now,
      2         sysdate + 2 as today_plus_2_days
      3  from dual;
    
    RIGHT_NOW           TODAY_PLUS_2_DAYS
    ------------------- -------------------
    15.12.2021 14:02:09 17.12.2021 14:02:09
    
    SQL>
    

    【讨论】:

      【解决方案2】:

      如果你有桌子:

      CREATE TABLE Book
      (
        Resource_ID   INT
                      GENERATED ALWAYS AS IDENTITY
                      CONSTRAINT book__rid__pk PRIMARY KEY,
        Title         VARCHAR2(40) NOT NULL,
        Loan_Period   int NOT NULL,
        noTimesLoaned int NOT NULL
      );
      
      CREATE TABLE Loan (
        Loan_No     INT
                    GENERATED ALWAYS AS IDENTITY
                    CONSTRAINT load__ln__pk PRIMARY KEY,
        Loan_Date   DATE NOT NULL,
        Return_Date DATE,
        Resource_ID CONSTRAINT loan__rid__fk REFERENCES book
                    NOT NULL
      );
      

      然后你可以创建一本书:

      INSERT INTO book(title, loan_period, notimesloaned)
      VALUES ('ABC', 14, 0);
      

      然后您可以使用INSERT INTO Loan (...) SELECT ... FROM book ... 将正确的书籍详细信息传输到loan 表中:

      INSERT INTO loan (loan_date, return_date, resource_id)
      SELECT TRUNC(SYSDATE),
             TRUNC(SYSDATE) + loan_period,
             resource_id
      FROM   book
      WHERE  resource_id = 1
      

      然后:

      SELECT * FROM loan;
      

      输出:

      LOAN_NO LOAN_DATE RETURN_DATE RESOURCE_ID
      1 2021-12-15 00:00:00 2021-12-29 00:00:00 1

      注意:Book 表中不应有 noTimesLoaned 列;如果您想获得该信息,则应使用COUNT(*) 查询Loan 表(可能在视图中)生成它。

      db小提琴here

      【讨论】:

        猜你喜欢
        • 2020-08-11
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多