使用另一列或另一列的值更新列

Flo*_*nt2 8 postgresql update

使用 PostgreSQL(我使用的是 9.1 版)是否可以通过单个查询批量更新具有另一列值的列值,但如果另一列值为空,则使用第三列的值,如果没有第三个使用当前日期时间(所有列都有 type timestamp

我需要改变

列A 列B 列C
空 foo 栏
null null baz
空空空

列A 列B 列C
foo foo 酒吧
巴兹空巴兹
quz null null

quz当前日期时间在哪里。

Low*_*n M 13

您可以使用COALESCE()函数进行更新:

UPDATE ...
SET columnA = COALESCE(columnB, columnC, now()); 
Run Code Online (Sandbox Code Playgroud)

COALESCE 将返回您提供的列表中的第一个非空值。


dez*_*zso 11

可以使用COALESCE提供默认值而不是可能的 NULL 值。它是一个可变参数函数,因此它可以接受任意数量的参数。返回值将是第一个非 NULL 参数(如果没有,它仍然返回 NULL)。

使用它,您UPDATE可能看起来像:

UPDATE your_table
SET columnA = COALESCE(columnB, columnC, 'quz');
Run Code Online (Sandbox Code Playgroud)