number資料型別在查詢中的顯示

skyin_1603發表於2016-10-22
講到number資料型別在查詢中的預設的顯示格式與長度,我的印象中模糊想起在2014年的那個夏天有看過相應的書講到,
說number資料型別在查詢中預設顯示是10位數的長度,超出10位之後,會以科學計數法格式顯示,設計不到10位長度的
前面會以空格顯示。其實這篇文章的最初想法不是這個,原來要探討的是手機號碼適合用哪種資料型別儲存。
至於number型別在查詢中顯示格式的話題是在測試當中遇到的,順便一起拿來測試。如果誰有更好想法的,可以在評論
分享一下,可以兩個問題一起。

測試過程如下:
----最初的想法:探討手機號碼儲存的資料型別:
--設計表格3個:
--T1:
create table t1(
id number(5)
constraint t1_pk primary key,
name varchar2(10) not null,
tel number(11),
created date);

--T2:
create table t2(
id number(5)
constraint t2_pk primary key,
name varchar2(10) not null,
tel number(12),
created date);

--T3:            #該表的Tel欄位採取字元型別
create table t3(
id number(5)
constraint t3_pk primary key,
name varchar2(10) not null,
tel varchar2(11),
created date);

--檢視3個表得表結構:
SQL> desc t1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(5)
 NAME                                      NOT NULL VARCHAR2(10)
 TEL                                                NUMBER(11)
 CREATED                                            DATE

SQL> desc t2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(5)
 NAME                                      NOT NULL VARCHAR2(10)
 TEL                                                NUMBER(12)
 CREATED                                            DATE

SQL> desc t3
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(5)
 NAME                                      NOT NULL VARCHAR2(10)
 TEL                                                VARCHAR2(11)
 CREATED                                            DATE
 
--調整會話時間的顯示格式:
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
 
--分別往3個表T1、T2與T3插入資料:
insert into t1 values(12546,'enmo',13645789452,sysdate);
insert into t1 values(12547,'ocmu',13645789453,sysdate);

insert into t2 values(12548,'ppqq',13645789454,sysdate);
insert into t2 values(12549,'qqpp',13645789456,sysdate);

insert into t3 values(12550,'yyww','13645789456',sysdate);
insert into t3 values(12551,'wwyy','13645789457',sysdate);

--分別檢視3個表的內容:
SQL> select * from t1;
        ID NAME              TEL CREATED
---------- ---------- ---------- -------------------
     12546 enmo       1.3646E+10 2016-10-21 16:29:35
     12547 ocmu       1.3646E+10 2016-10-21 16:29:38
     
SQL> select * from t2;
        ID NAME              TEL CREATED
---------- ---------- ---------- -------------------
     12548 ppqq       1.3646E+10 2016-10-21 16:29:45
     12549 qqpp       1.3646E+10 2016-10-21 16:29:47
     
SQL> select * from t3;
        ID NAME       TEL         CREATED
---------- ---------- ----------- -------------------
     12550 yyww       13645789456 2016-10-21 16:30:12
     12551 wwyy       13645789457 2016-10-21 16:30:14   

從以上的查詢資料看,t1,t2沒有達到我們想看到的設計效果,因為Tel欄位儲存的是11位的手機號碼,只有t3是完整顯示出來11位

--建立t5表:  #設計了tel欄位長度為13,兩位小數,純屬實驗新增對照組需求,實際沒必要    
SQL> create table t5(
  2  id number(5)
  3  constraint t5_pk primary key,
  4  name varchar2(10) not null,
  5  tel number(13,2),
  6  created date);
--檢視錶結構:
Table created.
SQL> desc t5;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(5)
 NAME                                      NOT NULL VARCHAR2(10)
 TEL                                                NUMBER(13,2)
 CREATED                                            DATE
--插入資料:
insert into t5 values(12555,'hhss',13945789455,sysdate);
insert into t5 values(12556,'hhll',13945789456,sysdate);

--檢視錶中的資料:
SQL> select * from t5;
        ID NAME              TEL CREATED
---------- ---------- ---------- -------------------
     12555 hhss       1.3946E+10 2016-10-21 16:51:33
     12556 hhll       1.3946E+10 2016-10-21 16:51:40

--檢視兩個欄位的實際長度:     
SQL> select length(id),length(tel) from t1;
LENGTH(ID) LENGTH(TEL)
---------- -----------
         5          11
         5          11
     
--指定tel欄位顯示的長度:       
SQL> col tel for 99999999999;
SQL> select * from t5;
        ID NAME                TEL CREATED
---------- ---------- ------------ -------------------
     12555 hhss        13945789455 2016-10-21 16:51:33
     12556 hhll        13945789456 2016-10-21 16:51:40

SQL> select * from t1;

        ID NAME                TEL CREATED
---------- ---------- ------------ -------------------
     12546 enmo        13645789452 2016-10-21 16:29:35
     12547 ocmu        13645789453 2016-10-21 16:29:38

有更多想法的朋友,可以在評論了分享。謝謝觀賞!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2126923/,如需轉載,請註明出處,否則將追究法律責任。

相關文章