简介:
CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
CAST()函数可以进行数据类型的转换。
CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔。
语法:
语法:CAST (expression AS data_type)
expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
可以转换的类型是有限制的。这个类型可以是以下值其中的一个:
- 二进制,同带binary前缀的效果 : BINARY
- 字符型,可带参数 : CHAR() 、VARCHAR
- 日期 : DATE
- 时间: TIME
- 日期时间型 : DATETIME
- 浮点数 : DECIMAL
- 整数 : SIGNED
- 无符号整数 : UNSIGNED
案例:
一、转换列或值
1)、转换列
--将empno的类型(number)转换为varchar2类型。
2)、转换值
--将字符串转换为整型。
返回值是整型值123。
--如果试图将一个代表小数的字符串转换为整型值,又会出现什么情况呢?
从上面可以看出,CAST()函数能执行四舍五入操作。
二、转换一个集合
语法: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;
--奖学金表。
--奖学金表规定了名次,每个名次的人数和奖金。
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;
现在要根据成绩表的成绩降序排列,按奖学金表的名额确定排名和奖金。排名时不考虑相同成绩。
排名的结果应该如下:
学号 成绩 名次 奖金
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_rank, b.money
FROM (SELECT c.*, ROW_NUMBER() OVER(ORDER BY score DESC) rn
FROM stu_score c) c,
(SELECT b.stu_rank,
b.money,
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
WHERE c.rn = b.rn;
通过对比发现,确实达到了目的。
此外cast还能转化成collection,varray,此时都需要记过multiset集合函数一起使用。
后面这个例子,需要深入理解一下。
以上内容,仅供参考。