2013-03-21 59 views
0

我想在我的oracle 11g數據庫中保存一些特定的字符(比方說4)。當我說數據時,我的號碼有一個領先的零 ,如0100 0101等等。爲什麼oracle截斷前導零。是否有可能避免這一點。我真的想要領先的零被保存。請幫忙。Oracle號碼數據類型問題

謝謝!

回答

5

如果你想顯示的號碼的前導零,然後使用:

to_char(my_number,'fm0000') 

如果你真的需要存儲的數量與前導零然後將其存儲爲一個VARCHAR2,因爲你有什麼有一個字符串只包含數字,而不是數字。

+0

添加fm - 謝謝@graceemile – 2013-03-22 09:10:26

1

如果要存儲前導零,請將數字存儲爲固定長度值的char()或存儲可變長度值的varchar()(或varchar2())。

數字以二進制格式存儲,它沒有前導零的概念。

+0

解釋很好,但解決方案 - 將字符串存儲爲數字 - 是Teh Suck!前導零是一個顯示問題,應該在客戶端處理。 – APC 2013-03-21 21:59:13

+3

@APC。 。 。我可以想到任何情況下,前導零都非常重要,我想將值存儲爲數字 - 不是郵政編碼,不是賬號,不是客戶ID。前導零最強調的不是顯示問題,它們表明看起來像一個數字的行爲不像一個數字,並且可能不應該在數據庫中這樣處理。 – 2013-03-21 22:06:20

+1

例如。對於電話號碼 - 0171 ...和00171之間有很大的區別... – 2013-03-22 09:11:48

-2

簡單的技巧來獲得8個位數:

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

你爲什麼要這樣做,而不是使用具有適當格式掩碼的'to_char'? – 2013-03-21 20:40:41

+0

@JustinCave - 只是爲了各種答案。是的,'to_char(a_number,lpad('0',N,'0'))'比'substr(a_number + power(10,N),2)'更可靠。 – 2013-03-21 20:46:59

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