SET NEW.ps = CURRENT_DATE(),怎么让他的日期为三年后
时间: 2023-06-18 08:02:26 浏览: 96
你可以使用MySQL内置函数 DATE_ADD() 来将当前日期增加三年。下面是一个示例:
```
SET NEW.ps = DATE_ADD(CURRENT_DATE(), INTERVAL 3 YEAR);
```
这将把当前日期加上三年,然后将结果赋值给 NEW.ps。注意,这将只在触发器中使用。如果想要在SQL语句中使用,可以将 `NEW.ps` 替换为相应的日期字段。
相关问题
CREATE TRIGGER default_trigger BEFORE INSERT ON logistics_trajectory FOR EACH ROW BEGIN IF NEW.id IS NULL OR NEW.id = '' THEN SET NEW.id = UUID(); END IF; IF NEW.create_date IS NULL OR NEW.create_date = '' THEN SET NEW.create_date = DATE_FORMAT(NOW(), '%Y-%m-%d'); END IF; IF NEW.update_date IS NULL OR NEW.update_date = '' THEN SET NEW.update_date = DATE_FORMAT(NOW(), '%Y-%m-%d'); END IF; END;执行报如下异常[42000][1235] This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
这个错误提示是因为 MySQL 不支持在同一个表的相同事件和动作时间上创建多个触发器。你可以尝试将多个触发器合并为一个触发器,如下所示:
```sql
CREATE TRIGGER default_trigger
BEFORE INSERT ON logistics_trajectory
FOR EACH ROW
BEGIN
IF NEW.id IS NULL OR NEW.id = '' THEN
SET NEW.id = UUID();
END IF;
IF NEW.create_date IS NULL OR NEW.create_date = '' THEN
SET NEW.create_date = DATE_FORMAT(NOW(), '%Y-%m-%d');
END IF;
IF NEW.update_date IS NULL OR NEW.update_date = '' THEN
SET NEW.update_date = DATE_FORMAT(NOW(), '%Y-%m-%d');
END IF;
END;
```
在这个触发器中,我们只使用了一个 `BEFORE INSERT` 事件,并在事件中对三个字段进行了判断和赋值。这样,就能够避免创建多个触发器的问题了。
CREATE TRIGGER default_trigger BEFORE INSERT ON logistics_trajectory FOR EACH ROW SET NEW.id = UUID(), NEW.create_date = DATE_FORMAT(NOW(), '%Y-%m-%d'), NEW.update_date = DATE_FORMAT(NOW(), '%Y-%m-%d');如何改成如果传过来的字段值为空才赋默认值
你可以在 `BEFORE INSERT` 触发器中,使用 `IF` 条件判断来判断字段值是否为空,如果为空则赋默认值。修改后的触发器示例如下:
```sql
CREATE TRIGGER default_trigger
BEFORE INSERT ON logistics_trajectory
FOR EACH ROW
BEGIN
IF NEW.id IS NULL OR NEW.id = '' THEN
SET NEW.id = UUID();
END IF;
IF NEW.create_date IS NULL OR NEW.create_date = '' THEN
SET NEW.create_date = DATE_FORMAT(NOW(), '%Y-%m-%d');
END IF;
IF NEW.update_date IS NULL OR NEW.update_date = '' THEN
SET NEW.update_date = DATE_FORMAT(NOW(), '%Y-%m-%d');
END IF;
END;
```
在触发器中,如果传入的字段值为空,则使用 `IS NULL` 或 `= ''` 来判断。如果为空,则使用 `SET` 语句给字段赋默认值。需要注意的是,在 MySQL 中,如果字段类型为时间类型,则可以直接使用 `NOW()` 函数获取当前时间,而不需要使用 `DATE_FORMAT()` 函数。