我正在建立一个数据库,该数据库将容纳各种设备,其中一个实体保存该设备的保修信息。我想要的属性之一是"Is_Valid"派生属性,该属性基本上是"无效"或"有效",具体取决于保修条款的结束日期是否已过。
我能够通过此查询在SQL中执行此操作:
CREATE TABLE Warranty(
Warranty_ID varchar(5),
Begin_Date date,
End_Date date,
Terms varchar(15),
Is_Valid as (IIF((GetDate() > Begin_Date) AND (GetDate() < End_date), 'valid','not valid')),
Primary Key (Warranty_ID));
但是,我一直在尝试在MySQL中完成此操作,但是我无法使其工作。我让它工作的唯一方法是使用 case
使用UPDATE Warranty
查询,但我宁愿数据库自动执行此操作。如果我理解了错误,请原谅我,因为我是数据库结构和实现的新手。谢谢。
首先,在MySQL方言中,GetDate()
变得CURDATE()
,IIF
变得IF
。
此外,我建议您使用 BETWEEN
来检查一系列值:这会更改Begin_Date和End_Date的行为(保修将有效,包括这些日期),但也许这也是您更喜欢的。
您可以使用表及其顶部的视图,如下所示:
CREATE TABLE Warranty(
Warranty_ID varchar(5),
Begin_Date date,
End_Date date,
Terms varchar(15),
Primary Key (Warranty_ID));
CREATE VIEW vw_Warranty AS
SELECT
Warranty_ID,
Begin_Date,
End_Date,
Terms,
IF(CURDATE() BETWEEN Begin_Date AND End_date, 'valid', 'not valid') as IS_Valid;