pgsql更新列数据

update gl_voucher set number = select lpad(number,5,'0') from gl_voucher
这样能更新表里对应字段的数据吗

你的SQL语句看起来是在尝试更新一个名为"gl_voucher"的表中的"number"字段。你使用了SELECT语句来获取新的值,然后使用LPAD函数来确保这个新值至少有5位,并且在必要的时候填充0。

然而,这个SQL语句存在一些问题。首先,你不能在UPDATE语句中嵌套使用SELECT语句。其次,LPAD函数需要三个参数:字符串、长度和填充字符。

如果你想根据某种规则更新"number"字段,你可能需要使用一个不同的方法。例如,如果你只是想确保所有的"number"字段都有5位,并且不足5位的在前面填充0,你可以使用如下的SQL语句:

UPDATE gl_voucher
SET number = LPAD(number, 5, '0')

但是请注意,这取决于数据库如何处理这种情况。在某些数据库中,这可能会引发错误,因为你在尝试更新一个函数的结果。在MySQL中,你可以这样写:

UPDATE gl_voucher
SET number = CONCAT('0000', number)
WHERE LENGTH(number) = 1

在这个例子中,我们假设你希望如果"number"字段的长度小于5,就在其前面添加足够的0,使其长度为5。对于已经超过5位的字段,"CONCAT"函数不会改变它们。