Sql 学习Oracle,基于日期设置布尔值
我刚开始在学校学习一个关于Oracle的模块,我想寻求一些帮助,因为我对数据库系统的总体功能还比较陌生 作为我的一项任务的一部分,我正在尝试创建一个存储客户详细信息的表,其中有“LastBillPaidDate”列作为日期数据类型,“hasUnpaidBill”列和布尔数据类型列 在设置约束时,是否有办法使LastBillPaidDate在X天前时,我将hasUnpaidBill从false设置为trueSql 学习Oracle,基于日期设置布尔值,sql,oracle,datetime,Sql,Oracle,Datetime,我刚开始在学校学习一个关于Oracle的模块,我想寻求一些帮助,因为我对数据库系统的总体功能还比较陌生 作为我的一项任务的一部分,我正在尝试创建一个存储客户详细信息的表,其中有“LastBillPaidDate”列作为日期数据类型,“hasUnpaidBill”列和布尔数据类型列 在设置约束时,是否有办法使LastBillPaidDate在X天前时,我将hasUnpaidBill从false设置为true 再次感谢,并期待着向大家学习 您是否应该首先在表中列出has_unpaid_bill列?它
再次感谢,并期待着向大家学习 您是否应该首先在表中列出
has_unpaid_bill
列?它取决于SYSDATE
。该需求闻起来像一个虚拟列,但是-您不能在那里使用SYSDATE
,因为它不是一个确定性函数。因此,换成视图如何?将所需数据保留在表中,但查询视图:
表和若干样本记录:
SQL> create table test
2 (id number,
3 last_bill_paid_date date
4 );
Table created.
SQL> insert into test values (1, date '2020-11-09');
1 row created.
SQL> insert into test values (1, date '2020-11-02');
1 row created.
视图:
听起来更像是一个触发器,而不是约束。我不知道您是如何将Oracle SQL中的任何内容设置为布尔数据类型的,因为Oracle SQL不支持该数据类型(这违反了强制要求支持该数据类型的SQL标准)。假设它是值为0和1的数字数据类型,或者是值为“真”和“假”的字符串数据类型,但请确认。您要做的不是非常基本的介绍级别。首先想到的是一个计算列(虚拟列)——但这不起作用,因为计算值必须是确定性的,而SYSDATE不是。相反,正确的解决方案是在表中只存储lastbillpaiddate。然后基于该表创建一个视图,并使用SYSDATE计算一个额外的“Boolean”列。每当你需要访问这个布尔值时,从视图中选择,而不是从表中选择。嗯,这看起来是可行的,我会尝试一下,谢谢!)@ShaunLin:如果这个答案正确地回答了你的问题,那么点击复选标记。
SQL> create or replace view v_test as
2 select id,
3 last_bill_paid_date,
4 case when trunc(sysdate) - last_bill_paid_date > 5 then 'Y'
5 else 'N'
6 end has_unpai_dbill
7 from test;
View created.
SQL>
SQL> select * from v_test;
ID LAST_BILL_ H
---------- ---------- -
1 09.11.2020 N
1 02.11.2020 Y
SQL>