‘壹’ 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实参,函数调用就会出错!