如果列的长度未知,如何添加前导零?

时间:2017-04-27 14:53:22

标签: postgresql null concatenation

如何将前导零添加到表格中的varchar列,我不知道列的长度。如果列不为null,那么我应该添加一个前导零。

示例:

345 - 输出应为0345
4567 - 输出应为04567

我试过了:

SELECT lpad(column1,WHAT TO SPECIFY HERE?, '0') 
from table_name;

我得到这个后会运行更新查询。

2 个答案:

答案 0 :(得分:2)

你可能会过度思考这个问题。使用简单连接:

SELECT '0' || column1 AS padded_col1 FROM table_name;

如果列为NULL,则不会发生任何事情:将任何内容连接到NULL将返回NULL。

特别是,请勿使用concat()。你会得到' 0' 的NULL列,你想要的。

如果您还有空字符串(''),则可能需要执行更多操作,具体取决于您的需要。

并且由于您提到了更新表的计划:考虑这样做,您正在添加噪声,可以添加噪声,以便使用简单表达式进行显示。 VIEW可能会派上用场。

如果您的所有varchar值实际上都是有效数字,请使用适当的numeric data type代替并使用与上面相同的表达格式进行显示。连接自动生成文本结果。

如果情况迫使你的手需要更新,请考虑以下事项:

UPDATE table_name
SET    column1 = '0' || column1
WHERE  column1 IS DISTINCT FROM '0' || column1;

添加的WHERE子句以避免空更新。比较:

答案 1 :(得分:0)

尝试concat而不是?..

SELECT concat(0::text,column1) from table_name;