我想在我的oracle 11g數據庫中保存一些特定的字符(比方說4)。當我說數據時,我的號碼有一個領先的零 ,如0100 0101等等。爲什麼oracle截斷前導零。是否有可能避免這一點。我真的想要領先的零被保存。請幫忙。Oracle號碼數據類型問題
謝謝!
我想在我的oracle 11g數據庫中保存一些特定的字符(比方說4)。當我說數據時,我的號碼有一個領先的零 ,如0100 0101等等。爲什麼oracle截斷前導零。是否有可能避免這一點。我真的想要領先的零被保存。請幫忙。Oracle號碼數據類型問題
謝謝!
如果你想顯示的號碼的前導零,然後使用:
to_char(my_number,'fm0000')
如果你真的需要存儲的數量與前導零然後將其存儲爲一個VARCHAR2,因爲你有什麼有一個字符串只包含數字,而不是數字。
如果要存儲前導零,請將數字存儲爲固定長度值的char()
或存儲可變長度值的varchar()
(或varchar2()
)。
數字以二進制格式存儲,它沒有前導零的概念。
解釋很好,但解決方案 - 將字符串存儲爲數字 - 是Teh Suck!前導零是一個顯示問題,應該在客戶端處理。 – APC 2013-03-21 21:59:13
@APC。 。 。我可以想到任何情況下,前導零都非常重要,我想將值存儲爲數字 - 不是郵政編碼,不是賬號,不是客戶ID。前導零最強調的不是顯示問題,它們表明看起來像一個數字的行爲不像一個數字,並且可能不應該在數據庫中這樣處理。 – 2013-03-21 22:06:20
例如。對於電話號碼 - 0171 ...和00171之間有很大的區別... – 2013-03-22 09:11:48
簡單的技巧來獲得8個位數:
substr(your_number + power(10,8), 2)
你爲什麼要這樣做,而不是使用具有適當格式掩碼的'to_char'? – 2013-03-21 20:40:41
@JustinCave - 只是爲了各種答案。是的,'to_char(a_number,lpad('0',N,'0'))'比'substr(a_number + power(10,N),2)'更可靠。 – 2013-03-21 20:46:59
以上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
添加fm - 謝謝@graceemile – 2013-03-22 09:10:26