用另一个字段中的单个INT更新MySQL日期字段?
问题描述:
为了简单起见,我有一个表中的两个字段:用另一个字段中的单个INT更新MySQL日期字段?
- 日期1(YYYY-MM-DD格式)
- 日(单或两位数字的天格式,1-31)
我希望能够使用Day内的值更新Date 1,但我不想多次调用(首先选择,读取结果,然后使用同一个表的结果更新)。
最终在我的呼叫的 '设计'(其不工作)将是:
UPDATE SET表日期1 = DATE(Y-(M + 1) - 天的(值) );
或在PHP中:
date("Y-m-d", mktime(0,0,0,date('m')+1, VALUE(Day), date('Y')));
这可能吗?
UPDATE
==
虽然我已经能够利用一些下面的代码,我不知道MySQL是“聪明”,足以运行计算,因为我有它。我的新代码是:
UPDATE表设置日期1 = CONCAT(YEAR(CURDATE()), ' - ',MONTH(ADDDATE(CURDATE(), 间隔1个月)), ' - ', Day1)
虽然这会返回正确的“新月”和“新的一天”,但当当月是十二月时,年份将错误。
例如:如果当前日期是2010-12-02。 Day字段中的首选数据为12.处理完脚本后,Date 1字段应更新为2011-01-12,但在上面的代码中,它只会输出到2010-01-12。
答
没有测试过,但我认为你缺少的是CONCAT:
UPDATE table SET datefield = CONCAT(YEAR(datefield),'-',MONTH(datefield),'-',dayfield);
重读你questioon后,这听起来像你想添加的天,那会是这样(没有测试过,太 - 看看DATE_ADD and INTERVAL):
UPDATE table SET datefield = DAT_ADD(datefield, INTERVAL dayfield DAYS);
我不明白你在做什么。 “日”是否存储实际的日期日期编号,或者是否将其递增?我认为摆脱你的Day字段和使用日期操作函数会让你更容易。通过使用两列来存储您可以从其中获得的相同数据,会产生很大的风险。 – Cfreak 2010-11-17 15:47:20
@Cfreak - 它不是相同的数据。日期1字段可以随时更新,但是当某些操作发生时,该字段的DAY部分将更新为存储在日期字段中的值。至于你的最后一点,有两个“类似”数据的字段,其中一个是tinyint并不是“很大的风险” – JM4 2010-11-17 15:49:25