oracle中CAST函数使⽤简介--oracle中CAST函数使⽤简介
CAST()函数可以进⾏数据类型的转换。
CAST()函数的参数有两部分,源值和⽬标数据类型,中间⽤AS关键字分隔。
⼀、转换列或值
语法:cast( 列名/值 as 数据类型 )
⽤例:
1)、转换列
--将empno的类型(number)转换为varchar2类型。
select cast(empno as varchar2(10)) as empno from emp;
EMPNO
----------
7369
7499
7521
...
2)、转换值
--将字符串转换为整型。
SELECT CAST('123' AS int) as result from dual;
RESULT
---
123
返回值是整型值123。
-
-如果试图将⼀个代表⼩数的字符串转换为整型值,⼜会出现什么情况呢?
SELECT CAST('123.4' AS int) as result from dual;
RESULT
--------
123
SELECT CAST('123.6' AS int) as result from dual;
RESULT
--------
124
从上⾯可以看出,CAST()函数能执⾏四舍五⼊操作。
--截断⼩数
SELECT CAST('123.447654' AS decimal(5,2)) as result from dual;
RESULT
-----------
123.45
decimal(5,2)表⽰值总位数为5,精确到⼩数点后2位。
SELECT CAST('123.4' AS decimal) as result from dual;
结果是⼀个整数值:
123
⼆、转换⼀个集合
语法:cast( multiset(查询语句) as 数据类型 )
1)转换成table
例⼦:
--学⽣成绩表
create table stu_score
(stu_no varchar2(50),--学号
score number--总分
);
);
insert into stu_score values('201301',67);
insert into stu_score values('201302',63);
insert into stu_score values('201303',77);
insert into stu_score values('201304',68);
insert into stu_score values('201305',97);
insert into stu_score values('201306',62);
insert into stu_score values('201307',87);
commit;
------------------------------------------
select * from stu_score;
学号分数
-------- ----------
201301 67
201302 63
201303 77
201304 68
201305 97
201306 62
201307 87
--奖学⾦表。
--奖学⾦表规定了名次,每个名次的⼈数和奖⾦。
create table scholarship
(
stu_rank varchar(10),--名次
stu_num int,--限定⼈数
money number--奖⾦
)
;
insert into scholarship values('1',1,'1000');
insert into scholarship values('2',2,'500');
insert into scholarship values('3',3,'100');
commit;
-----------------------------------------------
select * from scholarship;
名次⼈数奖⾦
--------- -----
1 1 1000
2 2 500
3 3 100
现在要根据成绩表的成绩降序排列,按奖学⾦表的名额确定排名和奖⾦。排名时不考虑相同成绩。
排名的结果应该如下:
学号成绩名次奖⾦
201305 97 1 1000
201307 87 2 500
201303 77 2 500
201304 68 3 100
201301 67 3 100
201302 63 3 100
SELECT c.stu_no,c.score,b.stu_
FROM (SELECT c.*,ROW_NUMBER() OVER(ORDER BY score DESC) rn FROM stu_score c) c ,(SELECT b.stu_,ROW_NUMBER() OVER(ORDER BY b.stu_rank) rn
FROM scholarship b
, TABLE( CAST( MULTISET( SELECT NULL
FROM DUAL
CONNECT BY LEVEL <= b.stu_num
)
AS SYS.ODCIVARCHAR2LIST )
)
) b
=b.rn;
执⾏结果如下:
STU_NO SCORE STU_RANK MONEY
----------------------------------
201305 97 1 1000
201307 87 2 500
201303 77 2 500
201304 68 3 100
201301 67 3 100
201302 63 3 100
通过对⽐发现,确实达到了⽬的。
此外cast还能转化成collection,varray,此时都需要记过multiset集合函数⼀起使⽤。
/*cast与round的区别***********************/
cast 是进⾏类型转换的,可以针对各种Oracle数据类型.修改的是⽤户的数据类型. round只是修改的数据显⽰格式. 对数据做四舍五⼊.
类似的函数还有ceil(取此数据的最⼩整数). trunc( 取整函数.)oracle decimal类型
create table t1(a varchar(10));
insert into t1 values ('12.3456');
select round(a) from t1;
--12
select round(a,3) from t1;
--12.346
select cast(a as int) from t1;
--12
select cast(a as number(8,4)) from t1;
--12.3456
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论