MySQL 触发器开始日期早于结束日期

标签 mysql date

我的服务器运行 MySQL 5.5.40 & 我目前有一个触发器,它首先检查两个日期列(discount_start 和discount_end)是否均为 NULL 或两者都有日期,然后检查discount_start 是否大于discount_end,其想法是确保开始日期不晚于结束日期。

第一位有效,但第二位检查开始日期是否晚于结束日期似乎不起作用。我已经进行了一些 Google 搜索,看来这里允许使用 > 运算符?

我使用的日期时间是discount_start的2015-12-10 04:16:34和disocunt_end的日期时间是2015-12-08 04:16:38,我编写的触发器如下。

# Both discount_start & discount_end must either be entered or NULL, one cannot be NULL while the other is entered
IF NEW.discount_start IS NULL AND NEW.discount_end IS NOT NULL THEN 
  signal sqlstate '45000' set message_text = 'discount_end has value but discount_start NULL, both need to have a value or be NULL';
ELSEIF NEW.discount_start IS NOT NULL AND NEW.discount_end IS NULL THEN 
  signal sqlstate '45000' set message_text = 'discount_start has value but discount_end NULL, both need to have a value or be NULL';
# discount_start date must be before discount_end
ELSEIF NEW.discount_start > NEW.discount_end THEN
  signal sqlstate '45000' set message_text = 'discount_start must be before discount_end';
ELSE
  SET new.created = NOW();
END IF

最佳答案

尝试

... ELSEIF DATEDIFF(NEW.discount_end, NEW.discount_start) < 0 THEN ...

触发代码中允许使用关系运算符(<、> 等),因此我假设您在 google 上搜索的答案专门指比较 DATE 类型。

关于MySQL 触发器开始日期早于结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34080877/

相关文章:

php - 在 codeigniter 中加入两个表

Java 将 unixtime 转换为日期,给出错误的结果

Java - 使用正则表达式从字符串中提取日期 - 失败

mysql - 最近开始使用 socket.io - 在向公众发布网站之前我应该​​采取哪些安全措施?

mysql - 使用 vb.net 和 SQL 数据库在现有系统上实现 RFID

php - 在一个表中,查看某个 ID 是否有一天中每一分钟的行 - 如何优化此查询?

php - 同一台服务器上的两个 Laravel 应用程序相互冲突

php - 如何获取给定月份中每周的日期间隔?

mysql - 什么是日期?一个字符串?或双?

date - Elasticsearch无法解析[时间戳记]