我在postgresql数据库中有列。他们是彩票号码。确切地说,四位数的长度。最初我将列的数据类型作为int。我插入了所有的彩票号码。插入所有数字后,我意识到它切断了我的零。例如0925是925.我将数据类型修复为varchar,但现在我需要弄清楚如何使用相同的数据将其从int修复为varchar。数据长度必须为4位数。我试图弄清楚有多少问题数字,我不能写一个select语句告诉我有多少行少于4位。
我应该怎么做?
感谢。
答案 0 :(得分:4)
我试图弄清楚有多少问题数字,我无法编写一个select语句,告诉我有多少行少于4位。
SELECT COUNT(*)
FROM lottery
WHERE char_length(x) < 4
查看在线工作:sqlfiddle
要修复它们,您可能会发现lpad
有用。请注意,实际上并不需要WHERE
子句。
UPDATE lottery
SET x = lpad(x, 4, '0')
查看在线工作:sqlfiddle
答案 1 :(得分: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;