Sql 如何使用原则更改日期时间值的时间部分?
我需要更改数据库中日期时间的时间部分 我得到的是数据库:“2010-01-01 01:00:00” 我需要将此更新为“2010-01-01 03:00:00” 我只有“03:00:00” 当我使用条令时,我可以遍历所有对象,但这会降低性能。 所以我尝试的是: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
$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中也会发生相同的错误。