【问题标题】:How can I add Year, Month, Day, Hour, Minute, Second to mysql date using date_add?如何使用 date_add 将年、月、日、时、分、秒添加到 mysql 日期?
【发布时间】:2014-06-02 16:20:27
【问题描述】:

在 mysql 数据库中添加日期时间类型列的最佳方法是什么?我尝试使用 DATE_ADD 但它仅在我添加单个日期/时间时才有效,例如:

DATE_ADD(start_date, INTERVAL :dayCount DAY)

这不起作用:

DATE_ADD(DATE_ADD(start_date, INTERVAL :dayCount DAY), INTERVAL :hourCount HOUR)

我尝试按照某些人的建议添加微秒:

$startMicro = strtotime($startDiff->format("%Y-%m-%d %H:%i:%s")) * 1000; // 943920000000
start=DATE_ADD(start, INTERVAL :startMicro MICROSECOND)

我最终做到了,它的工作原理: 在 PHP 中: $minutesDiff = (strtotime($start) - strtotime($row->start)) / 60; 在 SQL 语句中: start=DATE_ADD(开始,间隔:minutesDiff MINUTE)

感谢大家的帮助。

【问题讨论】:

  • 嗨,更好的方法是添加 MICROSECOND,只需将您的时间量转换为微秒并添加它
  • @Dan Bracuk:为什么?是它是几列的唯一方法,我还必须为每个列创建一个完整的查询,还是我只是一遍又一遍地写下函数。如果可以的话,请给我一个例子。

标签: php mysql sql


【解决方案1】:

将要添加的总时间转换为您想要添加的最小时间增量,因此您应该使用 25 小时而不是 1 天 1 小时。不是 1 小时、1 分钟、1 秒,而是 3601 秒等。

如果需要,您可以嵌套它们,但您的语法不正确,在第二个 INTERVAL 之前缺少一个逗号,应该是:

DATE_ADD(DATE_ADD(start_date, INTERVAL :dayCount DAY), INTERVAL :hourCount HOUR)

【讨论】:

  • 我尝试添加微秒但使数据库值 0000-00-00 00:00:00 $startMicro = strtotime($startDiff->format("%Y-%m-%d %H: %i:%s")) * 1000; start=DATE_ADD(start, INTERVAL :startMicro MICROSECOND)
  • 无需低于您实际打算添加的最低单位。
  • 几分钟内还是一样,也许我的转换已关闭。那么如何将日期时间转换为分钟呢?顺便说一句,感谢您的所有帮助。
  • 最后我做了这个并且它有效。在 PHP 中:$minutesDiff = (strtotime($start) - strtotime($row->start)) / 60;在 sql 中: start=DATE_ADD(start, INTERVAL :minutesDiff MINUTE)
【解决方案2】:

您可以使用以下语法:

start_date + INTERVAL :dayCount DAY + 
             INTERVAL :hourCount HOUR + 
             INTERVAL :minCount MINUTE

INTERVAL 类型为 YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND 和 MICROSECOND。

微秒对于 5.6.4 之前的 MySQL 版本没有任何意义。

请看这里:http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2012-01-19
    • 1970-01-01
    • 2014-09-08
    • 2011-07-26
    相关资源
    最近更新 更多