oraclecast转⽇期,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
例⼦:
-
-学⽣成绩表
oracle四舍五入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集合函数⼀起使⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。