number(p,s) s為負數為什么用不了
代碼部分:
SQL> desc test1123
Name? ?Type? ? ? ? ? Nullable Default Comments?
------ ------------- -------- ------- --------?
ID? ? ?INTEGER? ? ? ?Y? ? ? ? ? ? ? ? ? ? ? ? ?
NAME? ?NCHAR(8)? ? ? Y? ? ? ? ? ? ? ? ? ? ? ? ?
SALARY NUMBER(6,-8)? Y? ? ? ? ? ? ? ? ? ? ? ? ?
JOB? ? NVARCHAR2(10) Y? ? ? ? ? ? ? ? ?
SQL> insert into test1123 (name,job,salary,id) values ('hello','水電費水電費薩頂頂',23.2,2);
1 row inserted
SQL> select * from test1123;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ID NAME? ? ? ? ? ? ? ? SALARY JOB
--------------------------------------- ----------------- -------- ---------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 hello? ? ? ? ? ? ? ? ? ? 0 水電費水電費薩頂頂
改為 number(6,2)就能寫入了,但這個和number(6,-8)不是同一個意思嗎
2018-11-23
第二個參數為負數時,以number(6,-2)為例,表示有效位6位,取整至小數點前2位,例子中如果輸入123456則結果為123500,注意有四舍五入。 你的例子中-8的絕對值大于6,于是6位有效位被全部截掉并取整為0,所以最終結果為0
2019-04-04
Oracle中數據類型number(m,n)中m表示的是所有有效數字的位數,n表示的是小數位的位數。m的范圍是1-38,即最大38位。
??? 1> .NUMBER類型細講:
oracle?? number?? datatype?? 語法:NUMBER[(precision?? [, scale])]
簡稱:precision?? -->?? p?
????????? scale?? -->?? s
NUMBER(p,?? s)
范圍:?? 1?? <=?? p?? <= 38,?
?????? -84?? <=?? s?? <= 127
??????? 保存數據范圍: -1.0e-130?? <= number value? <?? 1.0e+126????????
保存在機器內部的范圍:?? 1?? ~?? 22?? bytes
有效位:從左邊第一個不為0的數算起的位數。
s的情況:
s?? >?? 0
????? 精確到小數點右邊s位,并四舍五入。然后檢驗有效位是否?? <=?? p。
s?? <?? 0
????? 精確到小數點左邊s位,并四舍五入。然后檢驗有效位是否?? <=?? p?? +?? |s|。
s?? =?? 0
????? 此時NUMBER表示整數。
2018-11-25
謝謝回答,剛剛試了下,的確如此,但是老師在《3-2 oracle管理表之數據類型》里講的是:number(p,s)中如果s為負數的時候,那么它就表示從最大有效數字到小數點的位數,不知道是不是我理解錯了