1

我在 postgresql 数据库中有列。它们是彩票号码。确切地说,长度为四位数。最初,我将列的数据类型设为 int。我插入了所有的彩票号码。在我插入所有数字后,我意识到它把我的零切掉了。例如 0925 是 925。我将数据类型固定为 varchar,但现在我需要弄清楚如何使用相同的数据将其从 int 修复为 varchar。数据长度必须为 4 位。我试图弄清楚有多少问题编号,但我无法编写一个选择语句来告诉我有多少行少于 4 位。

我该怎么办?

谢谢。

4

2 回答 2

4

我试图弄清楚有多少问题编号,但我无法编写一个选择语句来告诉我有多少行少于 4 位。

SELECT COUNT(*)
FROM lottery
WHERE char_length(x) < 4

在线查看它:sqlfiddle

要修复它们,您可能会发现lpad有用。请注意,WHERE实际上并不需要该子句。

UPDATE lottery
SET x = lpad(x, 4, '0')

在线查看它:sqlfiddle

于 2012-06-24T00:59:59.393 回答
1

使用以下格式格式化您的数字to_char()

SELECT to_char(123, 'FM0000');

您甚至可以将它们保留为整数并在查询中使用表达式。

或者,要将您的列从整数转换回原位文本:

ALTER TABLE tbl ALTER column col TYPE text USING to_char(col, 'FM0000');

由于您似乎已经将数字转换为varchar,因此表达式需要额外转换为整数:

SELECT to_char(col::int, 'FM0000')
FROM   tbl;
于 2012-06-24T01:01:32.790 回答