【问题标题】:Mysql: Time + intMysql:时间+整数
【发布时间】:2012-05-13 13:45:18
【问题描述】:

我有一个带有时间字段的表,我需要向它添加一个 int 字段。 这是代码行(它是一个触发器。)

DECLARE duration Int;
[....]
SET NEW.appointmentEnd = NEW.appointmentTime + duration;

这一直有效,直到时间达到一小时。所以 8:30:00 + 1500 = 8:45:00 但是 8:30:00 + 3000 = 0:00:00。

如何解决这个问题?

提前致谢! :)

【问题讨论】:

    标签: mysql time add


    【解决方案1】:

    您应该添加一个显式 interval,而不是添加一个“普通”int:

    new.appointmenttime = (new.appointmenttime + INTERVAL durationInMinutes MINUTE)
    

    你当然不限于使用MINUTE:如果你需要更高的精度,你可以使用SECOND

    【讨论】:

    • 感谢您的回复,但 SET NEW.appointmentEnd = NEW.appointmentTime + INTERVAL duration SECOND;不工作
    • @schoen here 是一个链接。我对 mysql 有点生疏 - 你需要在表达式周围加上括号。我会更新答案。
    【解决方案2】:

    MySQL 不会通过添加您尝试的“秒”来直接进行日期/时间数学运算。但是你可以通过 Date_Add() 和 Date_Sub() 来做,例如

    设置约会结束 = date_Add(约会时间,间隔 15 分钟)

    【讨论】:

    • 感谢您的回复,但 SET NEW.appointmentEnd=Date_add(NEW.appointmentTime, INTERVAL duration MINUTE);也不起作用:(
    【解决方案3】:

    您应该使用日期算术,例如:

        mysql> SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;
        -> '2009-01-01 00:00:00'
    

    或者

        mysql> SELECT DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 DAY);
        -> '2011-01-01 23:59:59'
    

    如果持续时间是,例如,以秒为单位:

        SET NEW.appointmentEnd = NEW.appointmentTime + INTERVAL duration SECOND;
    

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 2016-01-24
      • 2016-12-22
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多