PostgreSQL为日期添加X个月


PostgreSQL add X months to a date

我尝试将X个月添加到当前日期时间:

UPDATE mytable SET thedate=NOW() + INTERVAL '12 month' WHERE id=1

但是我得到了:

SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid input syntax for timestamp: « NOW() + INTERVAL '12 month' »

正确的语法应该是什么?

编辑:似乎它来自我的PHP准备/执行语法

    $t = $connect->prepare('UPDATE mytable 
        SET thedate=:duree
        WHERE id=:id');
    $ok = $t->execute([
        ':duree' => "NOW() + INTERVAL '$duree month'",
        ':id'    => $user,
    ]);

这里的问题是,您试图将变量与SQL表达式绑定,这是不可能的。您只能绑定文字值。如果你替换掉你所展示的绑定,假设$duree = 12,你会得到这样的SQL:

UPDATE mytable 
    SET thedate = 'NOW() + INTERVAL ''12 month'''
    WHERE id=:id

这显然是不正确的,因为'NOW() + INTERVAL ''12 month'''不是一个有效的时间戳[tz],因此你现在得到的错误。

由于只有月数是您的参数,您可以简单地将其乘以interval '1 month'作为整数:

$t = $connect->prepare('UPDATE mytable 
    SET thedate = now() + (:duree  * interval '1 month')
    WHERE id=:id');
$ok = $t->execute([
    ':duree' => $duree,
    ':id'    => $user,
]);