0
UPDATE ost_timeblock 
SET 
  timeblock_due_date=DATE(timeblock_next_update),
  timeblock_next_update=DATE_ADD(NOW(),INTERVAL timeblock_recurrence_time **timeblock_recurrence_unit** )
WHERE timeblock_recurrence=1 
  AND timeblock_complete=0 
  AND timeblock_next_update=FROM_UNIXTIME(1337662800)

当我使用手动日期或月份时,timeblock_recurrence_unit它工作正常。

timeblock_recurrence_unit = enum(day,month,year)我想要timeblock_recurrence_unit在上面的粗体位置的值

有什么办法可以处理案件。

If timeblock_recurrence_unit = 'day' then 
timeblock_next_update=DATE_ADD(NOW(),INTERVAL timeblock_recurrence_time day )

If timeblock_recurrence_unit = 'month' then  
timeblock_next_update=DATE_ADD(NOW(),INTERVAL timeblock_recurrence_time month)
4

2 回答 2

0
UPDATE ost_timeblock SET 
    timeblock_due_date = DATE(timeblock_next_update),
    timeblock_next_update = DATE_ADD(NOW(), INTERVAL timeblock_recurrence_time      
**timeblock_recurrence_unit** )
WHERE 
    timeblock_recurrence=1 
AND timeblock_complete=0 
AND timeblock_next_update = FROM_UNIXTIME(1337662800)

根据mysql文档: http ://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

date_add 功能接受日期和单位的倒数,以执行日期算术。你必须提供一个给定的单位,而不是你想要的单位的枚举。

您将不得不修改您的功能要求,并且可能再次考虑 DATE_ADD 方法是否正在执行所需的操作。

rgds。

于 2012-05-22T19:28:34.253 回答
0

您可以按如下方式使用用户定义变量;见http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

SET @timeblock_recurrence_unit = 'DAY';
UPDATE ost_timeblock SET
 timeblock_due_date=DATE(timeblock_next_update),
 timeblock_next_update=DATE_ADD(
       NOW(),
       INTERVAL timeblock_recurrence_time @timeblock_recurrence_unit
 ) WHERE 
    timeblock_recurrence=1 AND 
    timeblock_complete=0 AND
    timeblock_next_update= FROM_UNIXTIME(1337662800);
于 2012-05-22T19:34:09.350 回答