【问题标题】:Update MySQL Date field with single INT from another field?使用来自另一个字段的单个 INT 更新 MySQL 日期字段?
【发布时间】:2011-05-11 12:05:38
【问题描述】:

为简单起见,我在一个表中有两个字段:

  • 日期 1(YYYY-MM-DD 格式)
  • 天(一位或两位数的日期格式,1-31)

我希望能够使用 Day 中的值更新 Date 1,但我不想进行多次调用(首先是选择,获取结果,然后使用同一个表中的结果进行更新)。

最终,我的通话的“设计”(不起作用)将是:

更新表 SET 日期 1 = DATE(Y-(M+1)-(Day的值));

或在 php 中:

date("Y-m-d", mktime(0,0,0,date('m')+1, VALUE(Day), date('Y')));

这可能吗?

更新

==

虽然我已经能够使用下面的一些代码,但我不确定 MYSQL 是否足够“智能”来运行我所拥有的计算。我的新代码是:

更新表设置日期 1= CONCAT(YEAR(CURDATE()),'-',MONTH(ADDDATE(CURDATE(), 间隔 1 个月)),'-',Day1)

虽然这会返回正确的“新月份”和“新一天”,但当当前月份是 12 月时,年份将是错误的。

例如:如果当前日期是 2010-12-02。 Day 字段中的首选数据是 12。一旦我们的脚本处理完毕,Date 1 字段应该更新为 2011-01-12,但在上面的代码中它只会输出到 2010-01-12。

【问题讨论】:

  • 我不明白你想要完成什么。 “Day”是否存储实际的日期天数或者您是否正在增加它?我认为摆脱您的 Day 字段并使用日期操作功能会使您更容易。使用两列存储可以从一列获得的相同数据会冒很大的风险。
  • @Cfreak - 它不是相同的数据。日期 1 字段可以随时更新,但当发生某些操作时,该字段的 DAY 部分会更新为存储在 Day 字段中的值。最后一点,有两个具有“相似”数据的字段,一个是 tinyint 几乎不是“大风险”

标签: php mysql datetime


【解决方案1】:

未经测试,但我认为您缺少的是CONCAT

UPDATE table SET datefield = CONCAT(YEAR(datefield),'-',MONTH(datefield),'-',dayfield);

在重读你的问题后,听起来你想添加天数,那就是这样(也没有测试 - 看看DATE_ADD and INTERVAL):

UPDATE table SET datefield = DAT_ADD(datefield, INTERVAL dayfield DAYS);

【讨论】:

  • 您问题的第一部分完全正确,现在唯一的“附加”是将 MONTH 值增加一(所以当记录更新时,月份增加一,日期值已更改(与您的代码一样)并且年份相应地对应(即,如果更新发生在 2010 年 12 月 2 日;日期字段为 12;运行进程后,日期 1 现在是 2011 年 1 月 12 日
  • 我不希望“添加”天数,只是将日期本身更改为下个月。
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多