我将如何添加检查约束以确保日期不在未来

     2023-05-09     305

关键词:

【中文标题】我将如何添加检查约束以确保日期不在未来【英文标题】:How would I add a check constraint for making sure a date is not in the future 【发布时间】:2020-02-10 01:01:42 【问题描述】:

我找不到阻止人们在未来输入日期的语法。我有这个,但它不会工作?我只能使用 Oracle 的 SQL*Plus。

CONSTRAINT dateofenrolment CHECK (dateofenrolment  <= sysdate) 

【问题讨论】:

【参考方案1】:

您不能在带有检查约束的 Oracle 中执行此操作。问题是检查约束中使用的函数必须是确定性的。也就是说,它们必须在给定相同参数的情况下返回相同的值。很明显,sysdate 不符合这个要求,因为它的值每次都在变化。

Oracle 施加此限制是因为check 约束不仅在数据插入(或修改)表中时为真,而且始终为真。

不过,您可以使用触发器做您想做的事。只需定义一个 insertupdate 触发器即可防止错误值进入。

【讨论】:

【参考方案2】:

如您所知,这不能直接

SQL> create table test
  2    (id       number   primary key,
  3     datum    date     constraint ch_future check (datum <= sysdate)
  4    );
   datum    date     constraint ch_future check (datum <= sysdate)
                                                          *
ERROR at line 3:
ORA-02436: date or system variable wrongly specified in CHECK constraint


SQL>

幸运的是,有一个简单的解决方法:创建额外的 dummy 列,该列将 sysdate 作为默认值,然后在 check 约束中使用该列。不是内联(因为它无法完成):

SQL> create table test
  2    (id       number   primary key,
  3     dummy    date     default sysdate,
  4     datum    date     constraint ch_future check (datum <= dummy)
  5    );
  )
  *
ERROR at line 5:
ORA-02438: Column check constraint cannot reference other columns

但作为轮廓约束

SQL> create table test
  2    (id       number   primary key,
  3     dummy    date     default sysdate,
  4     datum    date,
  5     --
  6     constraint ch_future check (datum <= dummy)
  7    );

Table created.

SQL>

啊哈。表已创建。让我们测试一下。首先检查今天的日期:

SQL> select sysdate from dual;

SYSDATE
-------------------
03.06.2020 19:51:41

插入过去的日期值:

SQL> insert into test (id, datum) values (1, to_date('20.05.2020 13:30', 'dd.mm.yyyy hh24:mi'));

1 row created.

插入未来的日期值:

SQL> insert into test (id, datum) values (1, to_date('20.12.2020 23:30', 'dd.mm.yyyy hh24:mi'));
insert into test (id, datum) values (1, to_date('20.12.2020 23:30', 'dd.mm.yyyy hh24:mi'))
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_FUTURE) violated


SQL>

所以,是的 - 如果您可以忍受表格中的其他列,它会起作用。

【讨论】:

如何在列上添加检查约束以进行更新

】如何在列上添加检查约束以进行更新【英文标题】:Howtoaddacheckconstraintoncolumnforupdate【发布时间】:2016-12-1914:32:24【问题描述】:我正在向表中添加一列,并希望对其设置一个约束,即在给定日期之前不允许对其进行更新,并... 查看详情

如何以编程方式向 xib 添加约束

...格和其他标签有限制。如果我从superview中删除Label2,那么我将失去约束并且我的单元格将被更改。删除Label2时如何以编程方式在Label1和Label3之间添加约束。【问题讨论】:IO9+UIStackVi 查看详情

如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?

】如何使用DB2sql检查不在两个表中的记录以获取另一个第三个表中的日期?【英文标题】:HowtocheckrecordsnotintwotablesforadateinanotherthirdtableusingDB2sql?【发布时间】:2021-08-1609:58:52【问题描述】:我有一个Employee表,其中包含带有ID的... 查看详情

检查日期范围的最快方法

...ocheckdaterange【发布时间】:2009-05-2115:20:53【问题描述】:我将事件存储在SQLServer2005中,其中事件发生的时间很重要,并且必须存储在数据库中。在where子句中编写日期范围检查以确保选择当天的所有内容的最快方法是什么?目前... 查看详情

检查约束不允许我添加数据

】检查约束不允许我添加数据【英文标题】:Checkconstraintnotallowingmetoadddata【发布时间】:2019-10-2313:49:52【问题描述】:我有一个返回BIT的用户定义函数。1-如果日期重叠0-如果日期不重叠我已经测试了UDF,它似乎运行正常。这是... 查看详情

使用 JPA 标准的“不在”约束

...n(root.get(property1)));虽然我知道这行不通。在上述语法中,如何添加要检查的property1的集合/列表? 查看详情

Mysql触发约束检查

】Mysql触发约束检查【英文标题】:Mysqltriggerconstraintcheck【发布时间】:2014-06-2813:55:08【问题描述】:我不是数据库专家,我在做数据库项目时需要帮助。我使用phpmyadmin4.1.14版作为我的数据库服务器。我需要有一个约束,以确保... 查看详情

Postgres 9.2 - 添加条件约束检查

】Postgres9.2-添加条件约束检查【英文标题】:Postgres9.2-addconditionalconstraintcheck【发布时间】:2013-02-0720:59:05【问题描述】:我使用的是PostgreSQL9.2,需要在列上添加条件约束。本质上,我想确保当其他两列具有特定值时,一列为假... 查看详情

如何在 Scala 中为未来添加截止日期?

】如何在Scala中为未来添加截止日期?【英文标题】:HowtoaddadeadlinetoafutureinScala?【发布时间】:2021-07-0604:39:15【问题描述】:假设我有一个函数fab:A=&gt;Future[B]并希望它返回一个在截止日期之前完成的新未来。所以我正在写一... 查看详情

如何在 Rails 迁移中添加检查约束?

】如何在Rails迁移中添加检查约束?【英文标题】:HowdoIaddacheckconstraintinaRailsmigration?【发布时间】:2011-06-0713:31:00【问题描述】:我需要在我的Rails应用程序的现有表中添加一个新的整数列。该列只能有值1、2、3,所以我想为表/... 查看详情

何时评估检查约束?

】何时评估检查约束?【英文标题】:Whenarecheckconstraintsevaluated?【发布时间】:2017-06-0719:29:34【问题描述】:我有一个记录表IDEntityIDValueStatus还有一个实体表IDCol1Col2CurrentRecordIDCurrentRecordID应该是与Entity绑定的Record,Status为0我有... 查看详情

如何在 mariaDB 中创建检查约束以检查 char 类型的多个值?

】如何在mariaDB中创建检查约束以检查char类型的多个值?【英文标题】:howtocreatecheckconstraintinmariaDBforcheckingchartypemultiplevalues?【发布时间】:2018-08-0104:13:19【问题描述】:我在***等QuestionAnswer网站的大学项目中工作,但在MariaDB中... 查看详情

如何在目标 c 中以编程方式添加约束

】如何在目标c中以编程方式添加约束【英文标题】:HowtoaddConstraintprogrammaticallyinobjectivec【发布时间】:2016-02-0914:29:28【问题描述】:我想以编程方式添加约束,我使用下面的代码来添加TOP和LEFT约束。NSLayoutConstraint*top=[NSLayoutCons... 查看详情

在 SQL 的检查约束内使用“不在”查询

】在SQL的检查约束内使用“不在”查询【英文标题】:Usinga\'notin\'queryinsideofacheckconstraintinSQL【发布时间】:2021-12-1508:27:21【问题描述】:我有两张桌子,一张是学生桌子,一张是员工桌子:createtablestudent(idintnotnullprimarykey)createta... 查看详情

如何使用自动布局获得视图的实际大小?

...6-2902:04:38【问题描述】:我在界面生成器中有一个视图。我将宽度设置为600,高度设置为400。然后我添加了一些约束以确保它在不同屏幕尺寸的设备上正确显示。约束如下:\'superview的尾随空间:0,superview的前导空间:0....\'这... 查看详情

如何使用 Swift 以编程方式添加约束

】如何使用Swift以编程方式添加约束【英文标题】:HowtoaddconstraintsprogrammaticallyusingSwift【发布时间】:2014-10-0314:25:22【问题描述】:自上周以来,我一直在尝试解决这个问题,但没有更进一步。好的,所以我需要使用以下代码将S... 查看详情

如何以编程方式在 TableCell 中添加图像和添加约束?

】如何以编程方式在TableCell中添加图像和添加约束?【英文标题】:howtoaddImagesandaddconstraintsinTableCellprogrammatically?【发布时间】:2022-01-1905:54:56【问题描述】:我想实现下图的效果。我想在我的单元格中添加图像(由我用红线框... 查看详情

查询日期数组以仅显示未来事件 - PHP

...名为“事件”的自定义帖子类型,并使用高级自定义字段添加到自定义字段中。我只有基本字段,因为我们对日历的需求本身就是基本的。字段为:开始日期、结束日期、开始时间、结束时间、位置、标题我正在尝试使用基本上... 查看详情