『壹』 C語言中,什麼是顯式數據類型轉換,什麼是隱式數據類型轉換兩者有啥區別
顯示轉換 就是強制類型轉換
如 int a = (int) 6.3;
隱式轉換是編譯器默認轉換的
如 2 + 3.4
這時候 2轉換成 double類型2.0 再相加
『貳』 SQL的數據類型
【三】SQL的數據類型(表的欄位類型)
3.1 四種基本的常用數據類型(表的欄位類型)
1、字元型,2、數值型,3、日期型,4、大對象型
3.1.1 字元型:
字元類型char和varchar2的區別
SCOTT@ prod> create table t1(c1 char(10),c2 varchar2(10));
SCOTT@ prod> insert into t1 values('a','ab');
SCOTT@ prod> select length(c1),length(c2) from t1; char和varchar2默認以byte為計算單位
LENGTH(C1) LENGTH(C2)
---------- ----------
10 2
3.1.2 數值型:
3.1.3 日期型:
系統安裝後,默認日期格式是DD-MON-RR, RR和YY都是表示兩位年份,但RR是有世紀認知的,它將指定日期的年份和當前年份比較後確定年份是上個世紀還是本世紀(如表)。
當前年份 指定日期 RR格式 YY格式
------------------------------------------------------------------------------
1995 27-OCT-95 1995 1995
1995 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017
2013 27-OCT-95 1995 2095
3.1.4 LOB型:
大對象是10g 引入的,在11g中又重新定義,在一個表的欄位里存儲大容量數據,所有大對象最大都可能達到4G。CLOB,NCLOB,BLOB都是內部的LOB類型,沒有LONG只能有一列的限制。
保存圖片或電影使用BLOB最好、如果是小說則使用CLOB最好。雖然LONG、RAW也可以使用,但LONG是oracle將要廢棄的類型,因此建議用LOB。
雖說將要廢棄,但還沒有完全廢棄,比如oracle 11g里的一些視圖如dba_views,對於text(視圖定義)仍然沿用了LONG類型。
Oracle 11g重新設計了大對象,推出SecureFile Lobs的概念,相關的參數是db_securefile,採用SecureFile Lobs的前提條件是11g以上版本,ASSM管理等,符合這些條件的。BasicFile Lobs也可以轉換成SecureFile Lobs。較之過去的BasicFile Lobs, SecureFile Lobs有幾項改進:
1)壓縮,2)去重,3)加密。
當create table定義LOB列時,也可以使用LOB_storage_clause指定SecureFile Lobs或BasicFile Lobs,而LOB的數據操作則使用Oracle提供的DBMS_LOB包,通過編寫PL/SQL塊完成LOB數據的管理。
3.2 數據類型的轉換
3.2.1 轉換的需求
什麼情況下需要數據類型轉換
1)如果表中的某欄位是日期型的,而日期又是可以進行比較和運算的,這時通常要保證參與比較和運算的數據類型都是日期型。
2)當對函數的參數進行抽(截)取、拼接,或運算等操作時,需要轉換為那個函數的參數要求的數據類型。
3)製表輸出有格式需求的,可將date類型,或number類型轉換為char類型
4)轉換成功是有條件的,有隱性轉換和顯性轉換兩種方式
3.2.2隱性類型轉換:
是指oracle自動完成的類型轉換。在一些帶有明顯意圖的字面值上,可以由Oracle自主判斷進行數據類型的轉換。
一般規律:
①比較、運算或連接時:
SQL> select empno,ename from emp where empno='7788'
empno本來是數值類型的,這里字元'7788'隱性轉換成數值7788
SQL> SELECT '12.5'+11 FROM al;
將字元型『12.5』運轉成數字型再求和
SQL> SELECT 10+('12.5'||11) FROM al;
將數字型11隱轉成字元與『12.5』合並,其結果再隱轉數字型與10求和
②調用函數時
SQL> select length(sysdate) from al;
將date型運轉成字元型後計算長度
③向表中插入數據時
create table scott. t1 (id int,name char(10),birth date);
insert into scott.t1 values('123',456,'2017-07-15');
按照欄位的類型進行隱式轉換
3.2.3 顯性類型轉換
即強制完成類型轉換(推薦),有三種形式的數據類型轉換函數:
TO_CHAR
TO_DATE
TO_NUMBER
1)日期-->字元
SQL> select ename,hiredate, to_char(hiredate, 'DD-MON-YY') month_hired from emp
where ename='SCOTT';
ENAME HIREDATE MONTH_HIRED
---------- ------------------- --------------
SCOTT 1987-04-19 00:00:00 19-4月 -87
fm壓縮空格或左邊的'0'
SQL> select ename, hiredate, to_char(hiredate, 'fmyyyy-mm-dd') month_hired from emp
where ename='SCOTT';
ENAME HIREDATE MONTH_HIRED
---------- ------------------- ------------
SCOTT 1987-04-19 00:00:00 1987-4 19
其實DD-MM-YY是比較糟糕的一種格式,因為當日期中天數小於12時,DD-MM-YY和MM-DD-YY容易造成混亂。
以下用法也很常見:
SQL> select to_char(hiredate,'yyyy') FROM emp;
SQL> select to_char(hiredate,'mm') FROM emp;
SQL> select to_char(hiredate,'dd') FROM emp;
SQL> select to_char(hiredate,'DAY') FROM emp;
2)數字-->字元:9表示數字,L本地化貨幣字元
SQL> select ename, to_char(sal, 'L99,999.99') Salary from emp where ename='SCOTT';
ENAME SALARY
---------- --------------------
SCOTT 3,000.00
以下四個語句都是一個結果:
SQL> select to_char(1890.55,'$99,999.99') from al;
SQL> select to_char(1890.55,'$0G000D00') from al;
SQL> select to_char(1890.55,'$99G999D99') from al;
SQL> select to_char(1890.55,'$99G999D00') from al; 9和0可用,其他數字不行
3)字元-->日期
SQL> select to_date('1983-11-12', 'YYYY-MM-DD') tmp_DATE from al;
4)字元-->數字:
SQL> SELECT to_number('$123.45','$9999.99') result FROM al;
使用to_number時如果使用較短的格式掩碼轉換數字,就會返回錯誤。不要混淆to_number和to_char轉換。
SQL> select to_number('123.56','999.9') from al;
報錯:ORA-01722: 無效數字
練習:建立t1表,包括出生日期,以不同的日期描述方法插入數據,顯示小於15歲的都是誰
SQL> create table t1 (id int,name char(10),birth date);
insert into t1 values(1,'tim',sysdate);
insert into t1 values(2,'brian',sysdate-365*20);
insert into t1 values(3,'mike',to_date('1998-05-11','yyyy-mm-dd'));
這一句也可以寫成insert into t1 values(3,'mike',to_date('1998-05-11')),因為'1998-05-11'是和當前日期格式匹配的。
insert into t1 values(4,'nelson',to_date('15-2月-12','dd-mon-rr'));
SQL> select * from t1;
ID NAME BIRTH
---------- ---------- -------------------
1 tim 2016-02-25 17:34:00
2brian 1996-03-01 17:34:22
3 mike 1998-05-11 00:00:00
4 nelson 2012-02-15 00:00:00
SQL> select name||'的年齡是'||to_char(months_between(sysdate,birth)/12,99) age from t1
where months_between(sysdate,birth)/12<15;
AGE
-------------------------
tim 的年齡是 0
nelson 的年齡是 4
the end !!!
@jackman 共築美好!
『叄』 C語言中,數據類型的隱式轉換與顯式轉換分別是個什麼意思
隱式轉換就是不帶轉換類型的轉換,如int轉float你可以這樣子float
a
;int
b
=
4;
a=b就是隱式轉換,而a
=
(float)b就是顯示轉換。區別在於當向下轉換時如果不顯示轉換就會有問題,如float
a
=
4.5;
int
b
=
a;這里就可能報錯,因為int可以自動上升為float,但由float不能自動轉化為int,這里就需要顯式轉換,即int
b
=
(float)a才是最保險的;所以顯式轉換肯定不會出錯,但隱式轉換就說不定了。
『肆』 C#編程語言中,數據類型之間的轉換有哪些
(1) 隱式轉換:一般是低類型向高類型轉化,能夠保證值不發生變化。 隱式數值C#數據類型轉換: 從sbyte 到 short、int、long、float、double 或 decimal。 從byte 到 short、ushort、int、uint、long、ulong、float double 或 decimal。 從short 到 int、long、float、double 或 decimal。 從ushort 到 int、uint、long、ulong、float、double 或 decimal。 從int 到 long、float、double 或 decimal。 從uint 到 long、ulong、float、double 或 decimal。 從long 到 float、double 或 decimal。 從ulong 到 float、double 或 decimal。 從float 到 double。 不存在向 char 類型的隱式轉換,因此其它整型的值不會自動轉換為 char 類型。 浮點型不能隱式地轉化為decimal型 隱式枚舉轉換 隱式枚舉轉換允許將十進制整數 0 轉換為任何枚舉類型。 隱式引用轉換 派生類向基類轉換 隱式引用轉換是指一類引用類型之間的轉換,這種轉換總是可以成功,因此不需要在運行時進行任何檢查。 裝箱轉換 裝箱轉換允許將值類型隱式轉換為引用類型。 (2) 顯示轉換:也稱強制類型轉換。不能保證數據的正確性。 (type)(表達式) (3) 用戶自定義C#數據類型轉換 所有的用戶自定義轉換都是靜態的,要使用static關鍵字 用戶自定義轉換分顯示和隱示,它們用implicit(隱式轉換)或 explicit(顯示轉換)關鍵字聲明。 static 訪問修辭符 轉換修辭符 operator 轉換類型(參數) C#數據類型轉換示例:using System; struct Number { private int value; public Number(int value) { this.value=value; } //用戶自定義整型到Number型的隱式轉換 static public implicit operator Number(int value) { return new Number(value); } //用戶自定義從Number型到整型的顯示轉換 static public explicit operator int(Number n) { returnn.value; } //用戶自定義從Number類型到string類型的隱式轉換 static public implicit operator string(Number n) { returnn.ToString(); } } class Test { static public void Main() { Number n; n=10; Console.WriteLine((int)n); //隱式轉換到string Console.WriteLine(n); } } 使用System.Convert類 將一個基本數據類型轉換為另一個基本數據類型。 使用Parse方法 大部份預定義值類型都有這個靜態方法,用來將相應的文本轉化為相應的值類型。裝箱和取消裝箱 裝箱和取消裝箱使值類型能夠與 object 類型相互轉換。 裝箱轉換允許將「值類型」隱式轉換為「引用類型」。將「值類型」的值裝箱的操作包括:分配一個對象實例並將「值類型」的值復制到該實例中。 C#數據類型轉換示例: 此例將整數變數 i 通過裝箱轉換為對象 o。此例顯示對象保留了內容的原始副本,即 123。using System; class TestBoxing { public static void Main() { int i=123; object o=i;//隱式的裝箱 i=456;//改變變數i的值 Console.WriteLine("Thevalue-typevalue={0}",i);//456 Console.WriteLine("Theobject-typevalue={0}",o);//123是i的復制值 } } 取消裝箱轉換:取消裝箱轉換允許將引用類型顯式轉換為值類型。 取消裝箱操作包括以下兩個步驟:首先檢查該對象實例是否是某個給定的值類型的裝了箱的值,然後將值從實例中復制出來。 C#數據類型轉換示例: 下面的示例闡釋無效取消裝箱的情況,即錯誤的取消裝箱如何導致 InvalidCastException。通過使用 try 和 catch,發生錯誤時會顯示錯誤信息。 usingSystem; public class UnboxingTest { public static void Main() { int intI=123; object o=intI;//裝箱 try { //取消裝箱無效,short不是裝了箱的值類型.檢查該對象實例是否是某個給定的值類型的裝了箱的值int intJ=(short)o; Console.WriteLine("UnboxingOK."); } catch(InvalidCastException e) { Console.WriteLine("{0}Error:Incorrectunboxing.",e); } } } 其它轉換用運算符 as as 運算符用於執行引用類型的顯式類型轉換。 如果要轉換的類型與指定類型兼容,轉換就會成功;如果類型不兼容,則返回null。 表達式as 類型 as 運算符類似於類型轉換,所不同的是,當轉換失敗時,as 運算符將返回null,而不是引發異常。 示例: object o1=」SomeString」; object o2=5; string s1=o1asstring;//類型兼容s1=」SomeString」 string s2=o2asstring;//s2=null is is 運算符用於檢查對象的類型是否與給定類型兼容(對象是該類型,或是派生於該類型)。 表達式 is 類型 示例: int i=10; if(iisobject)//true {} sizeof sizeof 運算符用於獲得值類型的大小(以位元組為單位)。 sizeof(type) sizeof 運算符僅適用於值類型,而不適用於引用類型。 sizeof 運算符僅可用於 unsafe 模式。
『伍』 C語言中,數據類型的隱式轉換與顯式轉換分別是個什麼
顯式轉換, 就是強制轉換. 在被轉換的表達式前加(類型).
比如
(float)5
就是把5顯式轉換成float類型.
隱式轉換, 就是不需要加強制轉換, 系統會自動做這個操作.
比如
double k;
k=10;
10是int型, 不需要顯式轉換, 系統自動會把它轉為10.0
『陸』 C語言中,數據類型的隱式轉換與顯式轉換分別是個什麼意思
顯式轉換,就是強制轉換。在被轉換的表達式前加(類型),比如:(float)5,就是把5顯式轉換成float類型。
隱式轉換,就是不需要加強制轉換,系統會自動做這個操作,比如:
double k;
k=10;
10是int型,不需要顯式轉換,系統自動會把它轉為10.0。
(6)數據類型隱性轉換還有什麼擴展閱讀:
隱式自動類型轉換:
C++語言編譯系統提供的內部數據類型的隱式自動轉換規則如下:
1、執行算術運算時,低類型(短位元組)可以轉換為高類型(長位元組);例如: int型轉換成double型,char型轉換成int型等等;
2、賦值表達式中,等號右邊表達式的值的類型自動隱式地轉換為左邊變數的類型,並賦值給它;
3、函數調用時,將實參的值傳遞給形參,系統首先會自動隱式地把實參的值的類型轉換為形參的類型,然後再賦值給形參;
4、函數有返回值時,系統首先會自動隱式地將返回表達式的值的類型轉換為函數的返回類型,然後再賦值給調用函數返回。
『柒』 C++中自定義類型隱式轉換有哪些情況
C++中數據類型的隱式轉換主要用於函數調用時實參與形參的轉換,C++規定,將低精度數據類型轉換為高精度數據類型,可以由編譯器隱式完成。如果將高精度數據類型轉換為低精度數據類型,則必須用強制類型轉換運算符:static_cast<>()來進行轉換。比如下面幾個數據類型:
long double
double
int
char
bool
這幾種數據類型自下向上轉換時,不會造成數據丟失,可以隱式轉換,但自上向下隱式轉換時,會造成數據丟失,必須用強制類型轉換。比如你有一自定義函數,它接受一個double參數。在你調用這個函數,你給它傳遞一個int的實參,編譯器就會把這個實參隱式轉換為函數定義里參數的類型。如果這個函數是接受一個int參數,你給它傳遞一個double實參,函數調用就會出錯!