【问题标题】:Calculate return date from loan date从贷款日期计算归还日期
【发布时间】:2014-07-23 18:27:51
【问题描述】:

我正在尝试实现一个图书馆管理数据库,我想根据借阅日期推断归还日期,loandays 将保存我们允许用户拥有这本书的天数。到目前为止,这是我的代码:

CREATE TABLE LOAN 
( 
    COPY_ID int CONSTRAINT LOAN_COPY_FK 
            FOREIGN KEY(COPY_ID) REFERENCES COPY(COPY_ID) NOT NULL, 
    BORROWER_ID int CONSTRAINT LOAN_BORROWER_FK 
            FOREIGN KEY (BORROWER_ID) REFERENCES BORROWER (BORROWER_ID) NOT NULL, 
    LOAN_DATE DATE NOT NULL CONSTRAINT check_loan_date 
            CHECK (LOAN_DATE < RETURN_DATE),
    LOAN_DAYS int NOT NULL, 
    RETURN_DATE AS (LOAN_DATE + LOAN_DAYS) CONSTRAINT LOAN_PK 
            PRIMARY KEY(COPY_ID, BORROWER_ID) 
)

我有一个错误,因为LOAN_DAYS 是整数,我不知道如何使它成为一天而不是没有年月的日期。

【问题讨论】:

  • 你得到什么错误?请添加更多信息。请参阅stackoverflow.com/questions/how-to-ask 了解如何编写问题。请在提问前在线搜索您的问题。
  • 拜托,do not use all caps,当然你的 SQL 代码除外。它也使内容更难阅读。
  • 请用清晰的句子解释您的问题,我们都会为您提供帮助
  • 对不起,这是我第一次在这里问,我收到了流动错误 {Msg 206, Level 16, State 2, Line 1 Operand type conflict: date is incompatible with int}
  • 为了让您的问题更清楚,您可以在问题中添加确切的错误消息。通过单击标签正下方的 edit 按钮来编辑问题 :-)

标签: sql sql-server database date


【解决方案1】:

你应该计算RETURN_DATE AS DATEADD(day, LOAN_DAYS, LOAN_DATE),你不能在检查约束CONSTRAINT check_loan_date CHECK (LOAN_DATE &lt; RETURN_DATE)中使用计算出的RETURN_DATE

相反,我建议有一个检查约束LOAD_DAYS 大于0,这保证RETURN_DATE 大于LOAD_DATE,如下所示:

CREATE TABLE LOAN 
( 
    COPY_ID int CONSTRAINT LOAN_COPY_FK FOREIGN KEY(COPY_ID) REFERENCES COPY(COPY_ID) NOT NULL, 
    BORROWER_ID int CONSTRAINT LOAN_BORROWER_FK FOREIGN KEY (BORROWER_ID) REFERENCES BORROWER (BORROWER_ID) NOT NULL, 
    LOAN_DATE DATE NOT NULL ,
    LOAN_DAYS int NOT NULL CONSTRAINT check_loan_days CHECK (LOAN_DAYS > 0), 
    RETURN_DATE AS DATEADD(day,LOAN_DAYS,LOAN_DATE) CONSTRAINT LOAN_PK PRIMARY KEY(COPY_ID, BORROWER_ID) 
)

【讨论】:

  • 谢谢@MKYuones 你救了我,非常感谢,我的问题在哪里 1. 我在 RETURN_DATE 中使用了检查约束,我计算错误的是 RETURN_DATE。非常感谢
猜你喜欢
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多