2012-06-24 57 views
1

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

我应该怎么办?

谢谢。

回答

4

我想弄清楚有多少问题编号,我无法写出一条select语句告诉我有多少行少于4位数。

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

看到它联机工作:sqlfiddle

为了解决这些问题,你可能会发现lpad有用。请注意,WHERE子句实际上并不需要。与to_char()sqlfiddle

+0

用'SELECT COUNT(*)FROM lottery WHERE x <1000'计算计数不是很简单吗? – kgrittn

+0

@kgrittn:我正在假设“我将数据类型固定为varchar”。 –

1

格式你的号码:

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

看到它的在线工作

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;