Oracle号码数据类型问题

时间:2013-03-21 20:21:43

标签: sql oracle oracle11g rdbms

我试图在我的oracle 11g db中保存一些特定字符(让我们说4)。我的数字有一个前导零 当我说数据时,这样的0100 0101等。为什么oracle会截断前导零。有可能避免这种情况。我真的希望领先的零被保存。请帮忙。

谢谢!

4 个答案:

答案 0 :(得分:5)

如果要显示前导零的数字,请使用:

to_char(my_number,'fm0000')

如果确实需要存储带有前导零的数字,那么将其存储为varchar2,因为你所拥有的字符串只包含数字,而不是数字。

答案 1 :(得分:3)

上面的TO_CHAR答案最好,但是需要进行调整,因为TO_CHAR(number, '0000')会将前导零加上添加到前导空格,如果存在负数,则为占位符签名:

SELECT '[' || TO_CHAR(123, '0000') || ']' "Format" FROM DUAL;

Format
-------
[ 0123] <-- note the leading space

要删除空格,请使用LTRIM或使用格式字符串中的FM限定符:

SELECT '[' || TO_CHAR(123, 'FM0000') || ']' "Format" FROM DUAL;

Format
-------
[0123] <-- no more leading space

答案 2 :(得分:1)

如果要存储前导零,则将数字存储为char()(固定长度值)或varchar()(或varchar2())以获取可变长度值。

数字以二进制格式存储,没有前导零的概念。

答案 3 :(得分:-2)

获得8位数的简单技巧:

substr(your_number + power(10,8), 2)