一、 oracle 的 number 型別精度、刻度範圍
number(p,s)
p: 1---38
s: -84---127
有效數字:從左邊第乙個不為
0的數算起,到末位數字為止的所有數字,小數點和負號不計入有效位數。
p>0 ,對 s 分 3 種情況:
1.
s>0
精確到小數點右邊
s位,並四捨五入。然後檢驗有效數字是否
<= p;
zwf.yudong>create table t_n(id number(5,2));
table created.
-- 小數點前面最多只能有
3位,小數點後面位數可以任意多
zwf.yudong>insert into t_n values(123.45);
1 row created.
zwf.yudong>insert into t_n values(123.455);
1 row created.
zwf.yudong>insert into t_n values(12.345);
1 row created.
zwf.yudong>insert into t_n values(1.234);
1 row created.
zwf.yudong>insert into t_n values(.001);
1 row created.
zwf.yudong>select * from t_n;
id----------
123.45
123.46
12.35
1.23
0.00
5 rows selected.
zwf.yudong>insert into t_n values(1234.5678); -- 有效位為
4 + 2 > 5
insert into t_n values(1234.5678)
*error at line 1:
ora-01438: value larger than specified precision allowed for this column
zwf.yudong>insert into t_n values(12345); -- 有效位為
5 + 2 > 5
insert into t_n values(12345)
*error at line 1:
ora-01438: value larger than specified precision allowed for this column
如果
s > p
,小數點右邊至少有
s - p個0
填充。
zwf.yudong>create table t_n(id number(4,5));
table created.
zwf.yudong>insert into t_n values(1);
insert into t_n values(1)
*error at line 1:
ora-01438: value larger than specified precision allowed for this column
zwf.yudong>insert into t_n values(.1); --0.10000
,有效位為
5 > 4
insert into t_n values(.1)
*error at line 1:
ora-01438: value larger than specified precision allowed for this column
zwf.yudong>insert into t_n values(1.01 ); --1.01000
,有效位為
6 > 4
insert into t_n values(1.01)
*error at line 1:
ora-01438: value larger than specified precision allowed for this column
zwf.yudong>insert into t_n values(.01);
1 row created.
zwf.yudong>insert into t_n values(.001);
1 row created.
zwf.yudong>insert into t_n values(.0001);
1 row created.
zwf.yudong>insert into t_n values(.00001);
1 row created.
zwf.yudong>insert into t_n values(.00000 6);
1 row created.
zwf.yudong>insert into t_n values(.000000 1); --超過刻度儲存
0
1 row created.
zwf.yudong>select * from t_n;
id-------------
0.01000
0.00100
0.00010
0.00001
0.00001
0.00000
6 rows selected.
2.s<0
精確到小數點左邊
s位,並四捨五入。然後檢驗有效數字是否
<= p + |s|
zwf.yudong>create table t_n(id number(5,-2));
table created.
zwf.yudong>insert into t_n values(123);
1 row created.
zwf.yudong>insert into t_n values(1234);
1 row created.
zwf.yudong>insert into t_n values(12345);
1 row created.
zwf.yudong>insert into t_n values(123456);
1 row created.
zwf.yudong>insert into t_n values(1234567);
1 row created.
zwf.yudong>insert into t_n values(12 );
1 row created.
zwf.yudong>insert into t_n values(1 );
1 row created.
zwf.yudong>insert into t_n values(.1 );
1 row created.
zwf.yudong>insert into t_n values(1234567.6789 );
1 row created.
zwf.yudong>select * from t_n;
id------------
100
1200
12300
123500
123460000
01234600
9 rows selected.
zwf.yudong>insert into t_n values(12345678);
insert into t_n values(12345678)
*error at line 1:
ora-01438: value larger than specified precision allowed for this column
3.s=0
表示整數
number(p)
:相當於
number(p,0)
,用於指定整數
number
:不指定p、
s的number
,用於表示浮點數,其
precision
和scale
都是oracle
所能支援的最大值
總結:在p < s這種情況下
1.只能用來存放大於0小於
1的小數
。
2. 小數點後緊接著的
0的數目至少有
s-p個 ,不然無法正常插入。
3. p
用來指定小數點之後的最大有效數字位數。當然不包括小數點後緊接著的
0的個數。
4. s
是用來限制小數點後的數字位數【當然也就包括小數點後緊接的0】。
在p > s這種情況下
小數點前最多能插入:
p - s
個數字,但是小數點後的數字可以任意長度
Oracle中的number型別
number型別的語法很簡單 number p,s p 精度位 有效數字位 precision,是總有效資料位數,取值範圍是38,預設是38,可以用字元 表示38。s 小數字,scale,是小數點右邊的位數,取值範圍是 84 127,預設值取決於p,如果沒有指定p,那麼s是最大範圍,如果指定了p,那...
ORACLE儲存之NUMBER型別
這篇是關於oralce對number型別儲存方式的探析,以及試圖對設計者的初始意圖進行解釋.最近網上看了很多對 oracle 怎樣進行資料儲存描述的 感覺都不好理解 於是參照了很多文章 自己琢磨了下幾種簡單資料型別的儲存 number型別 oracle 對number 的儲存,是按一定規則進行轉換以...
oracle 中 number型別實驗
create table shentest testcol number 7 testcol2 number 7,1 testcol3 number 7,2 testcol4 number 7,1 testcol5 number 7,2 select from shentest insert int...