当前位置: 首页 > 知识库问答 >
问题:

在创建表sql中检查日期

江奕
2023-03-14

编辑:8.0.20版本

我现在正在学习sql,我试图修复它,但我做不到。 我有三张桌子

create table order(
    id_order int primary key,
    order_date date
);
create delivery(
    id_delivery int primary key,
    delivery_date date,
    cod_order int,
    foreign key (cod_order) references order(id_order)
);
create purchased_product(
    id_product int,
    cod_order int,
    return_date date,
    foreign key (cod_order) references order(id_order)
    primary key (id_product, cod_order)
);

这是一个比较容易的计划,但已经足够了。 code>return_date必须小于delivery_date+30天我试图对return_date使用check,但没有工作,因此我创建了一个视图,仅选择已交付的产品

create view product_order_delivery(date_delivered_product) as
select date_delivery
from purchased_product P right join (select date_delivery, id_order
                                    from order right join delivery
                                    on order.id_order = delivery.cod_order
                                    where date_delivery is not null) OD
on P.cod_order = OD.id_order

我用checkreturn_date上再次尝试。

有人能帮我弄明白怎么修吗?

提前感谢:)

共有1个答案

桂志新
2023-03-14

解决这一问题的两种常见选择是:

  1. 编写触发器以确保条件为真。
  2. 编写用户定义函数并在check约束中使用该函数。

对于您的情况,另一种方法可能就足够了。 更改return_date的定义,使其为days_to_return。 然后可以使用check约束:

check (days_to_return between 0 and 30)

当然,要获得实际日期,您将需要连接这两个表来获取交付日期。

编辑:

insert触发器如下所示:

delimiter $$
create trigger trig_purchased_product_return_date
    before insert on purchased_product
    for each row
begin
    select @delivery_date = delivery_date
    from delivery d
    where d.cod_order = new.cod_order;

    if new.return_date < @delivery_date or new.return_date > @delivery_date + interval 30 day then
        signal sqlstate '45000' set message_text = 'invalid return_date'
    end if
end;

delimiter ;
 类似资料:
  • 问题内容: 是否有与SQL Server 2008类似的东西?我想使用当前的年份和月份创建日期,但是要使用自己的月份。为了在计算列公式中使用它,需要一行完成。 例如(我不确定是否有效,因为我没有SQL Server 2012): 在SQL Server 2008中有没有办法做到这一点? DATEFROMPARTS似乎仅在SQL Server 2012中可用(链接) 问题答案: 使用示例中的,您可以

  • 问题内容: 假设我要将数千天存储在一个表中,如何从日历中检索它? 问题答案: 这是您可以在SQL Server中使用的通用脚本。只需修改开始和结束日期: 如果您想要更高级的日历,可以在网上找到:

  • 问题内容: 好吧,假设我有一个看起来像这样的表: 任何人都有关于如何查询它的想法,因此数据看起来像 问题答案: 我不会将ID放在这里,因为我认为它与查询无关。如果您愿意,请稍后再说。这是一个MSSQL查询。 可以很容易地将其翻译为其他数据库类型。

  • 问题内容: tl; dr:我想在Redshift中生成一个日期表,以使报表更易于生成。最好不需要在Redshift中已经有大表,而需要上传一个csv文件。 长版:我正在处理一份报告,其中我必须平均一周中每天创建的新项目。日期范围可能跨越数月或更长时间,因此可能有5个星期一,但只有4个星期日,这可能会使数学有些棘手。另外,我不能保证每天都有一个实例,尤其是一旦用户开始切片数据时。其中,这是BI工具的

  • 如果表已经存在,如何检查TarantoolSQL?

  • 问题内容: 我希望这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。 当您用Google搜索答案时,会得到很多不同的答案。有官方/后向和向前兼容的方式吗? 这是两种可能的方法。两种方法中的哪一种是标准/最佳方法? 第一种方式: 第二种方式: MySQL提供的简单 陈述。我正在寻找类似的东西。 问题答案: 对于此类查询,最好始终使用INFORMATION_

  • 问题内容: 在MySQL中可以做 什么是SQL Server等效项? 问题答案: 在SSMS中,右键单击表节点,然后单击“脚本表为” /“创建”。 没有内置的“此表脚本” T-SQL。 sp_help’tablename’会提供有用的表信息。

  • 问题内容: 如何查询SQL Server的SQL Server 2005表列的创建日期? 我尝试获取该信息,但是创建日期未包含在此存储过程中。 如何才能做到这一点? 问题答案: 有一个名为sys.Columns的系统表,您可以从中获取列信息。如果要查看特定表的列,可以执行以下操作: 或者,您可以获取如下表信息: 但是我找不到有关列创建日期的任何信息。 更新: 这可能会有所帮助。