Sql 如何使用原则更改日期时间值的时间部分?

Sql 如何使用原则更改日期时间值的时间部分?,sql,mysql,datetime,doctrine,Sql,Mysql,Datetime,Doctrine,我需要更改数据库中日期时间的时间部分 我得到的是数据库:“2010-01-01 01:00:00” 我需要将此更新为“2010-01-01 03:00:00” 我只有“03:00:00” 当我使用条令时,我可以遍历所有对象,但这会降低性能。 所以我尝试的是: $q = Doctrine_Query::create() ->update('Something s') ->set('start_at', 'DATEADD(D

我需要更改数据库中日期时间的时间部分

我得到的是数据库:“2010-01-01 01:00:00” 我需要将此更新为“2010-01-01 03:00:00” 我只有“03:00:00”

当我使用条令时,我可以遍历所有对象,但这会降低性能。 所以我尝试的是:

$q = Doctrine_Query::create()
                ->update('Something s')
                ->set('start_at', 'DATEADD(DATESUB(start_at,HOUR_SECOND TIME(start_at)), HOUR_SECOND ?)', $doctrine_article->start_time)
                ->set('start_at', 'DATEADD(DATESUB(end_at,HOUR_SECOND TIME(end_at)), HOUR_SECOND ?)', $doctrine_article->end_time)
                ->where('s.some_id = ?',$doctrine_article->id)
                ->andWhere('s.start_at > ?',$current_date)
                ->execute();
更新
再解释一下:
我试图删除当前日期时间的时间部分,因此我得到了“2010-01-01 00:00:00”,然后将给定的时间(“03:00:00”)添加到该时间中,因此在最后应该是想要的“2010-01-01 03:00:00”

但是这会导致一个错误(
1064您的SQL语法中有一个错误


有没有提示如何解决此错误并实现所述功能?

使用
DATE
功能删除时间部分会更容易。之后,您可以使用不同的方式再次添加时间:

start_at = DATE(start_at) + INTERVAL 3 HOUR

start_at = DATE(start_at) + INTERVAL 10800 SECOND

start_at = CONCAT(DATE(start_at), ' ', '03:00:00')

等等。

尝试这样做:
->set('start\u time','CONCAT(DATE(start\u at),'',?',$doctor\u article->start\u time)
但它导致了一个新错误:
调用未定义的方法doctor\u Query\u set::parseLiteralValue()
首先:您忘记了在
之后加上括号。第二:如果这还不够,请尝试
->set('start\u time','CONCAT(DATE(start\u at),?,?,?)',array(''.$doctor\u article->start\u time))
在作为纯SQL执行时像charme一样工作。在doctor中也会发生相同的错误。