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_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;

执行结果如下:

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()函数可以进行数据类型的转换。的更多相关文章

  1. Oracle CAST() 函数 数据类型的转换

    CAST()函数可以进行数据类型的转换. CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔. 以下例子均通过本人测试. 一.转换列或值 语法:cast( 列名/值 as 数据类 ...

  2. oracle中CAST函数使用简介【转】

    CAST()函数可以进行数据类型的转换. CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔. 以下例子均通过本人测试. 一.转换列或值 语法:cast( 列名/值 as 数据类 ...

  3. mysql中将一个数据类型转换成另外的数据类型?mysql中cast函数的使用?

    需求描述: 今天在看mysql的函数,提到了通过cast函数将一个数据类型值转换为特定类型的结果值. 在此记录下.将一个表达式转换为特定精度的小数. 操作过程: 1.查看6/4的结果 mysql; + ...

  4. oracle显示转换字段类型cast()函数

    今天遇到一个查询类型转换的问题:表的字段是varchar2类型,然后查询到的结果要转换为number(20,2),刚开始的时候使用to_number()函数,发现不能满足需求.后来才知道,原来还有ca ...

  5. CAST()函数

    语法: CAST(expression AS data_type) 参数说明: expression:任何有效的SQServer表达式 AS:用于分割两个参数,在AS之前的是需要处理的数据,在AS之后 ...

  6. SQL函数学习(十九):CAST()函数和CONVERT()函数

    19.CAST()函数和CONVERT()函数 CAST()函数可以将某种数据类型的表达式转化为另一种数据类型 CONVERT()函数 也 可以将指定的数据类型转换为另一种数据类型 19.1 CAST ...

  7. SQL中的cast()函数

    CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型.CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型. 语法: CAST (expression AS dat ...

  8. SQL中的CONVERT();cast()函数

    SQLSERVER中CONVERT函数格式: CAST (expression AS data_type) 参数说明: expression:任何有效的SQLServer表达式. AS:用于分隔两个参 ...

  9. MYSQL中,CAST函数的使用规则

    CAST函数语法规则是:Cast(字段名 as 转换的类型 ),其中类型可以为: CHAR[(N)] 字符型 DATE 日期型DATETIME 日期和时间型DECIMAL float型SIGNED i ...

随机推荐

  1. MySQL关于root密码修改

    (转载) 方法一:在mysql系统外,使用mysqladmin修改mysqladmin -u root -p password "test123"Enter password: [ ...

  2. spring cloud使用Feign做消费端时的eureka.client.registerWithEureka/eureka.client.fetchRegistry是否配置的问题

    记录一下今天工作中的一个小失误. 今天用Feign搭建服务消费者的时候,考虑消费者不需要再提供服务给其他服务,所以不需要注册到注册中心(eureka)中.结果把registerWithEureka和f ...

  3. RabbitMQ中的RPC实现

    1.RPC简述 RPC,Remote Procedure Call 远程过程调用.通俗讲,两段程序不在同一个内存空间,无法直接通过方法名调用,就需要通过网络通信方式调用.对于RabbitMQ,本身就是 ...

  4. win10操作系统 安装nodejs报2503错误解决方法

    报该错误的原因是由于安装操作没有获得足够的管理权限导致. 在电脑左下角开始菜单[右键]选择"命令提示符(管理员)“ 敲入如下命令 msiexec /package 后面加你nodejs的本机 ...

  5. oracle 数据库备份expdp、impdp

    跳转查看:https://blog.csdn.net/qq_26230421/article/details/79382013 或 https://www.cnblogs.com/promise-x/ ...

  6. 微信小程序前端开发踩坑(一)

    之前由于不了解微信小程序的整个的运行开发机制,走了很多的弯路,脑子灵光的可能不会遇到,这个主题系列的帖子希望可以帮助到像我一样理解能力慢的孩子. 不论是开发微信小程序还是说学习任何一门编程语言,最重要 ...

  7. 虚拟机中ubuntu不能联网问题的解决——NAT方式

    困惑我多时的Ubuntu联网问题终于解决啦,开心!!!现记录如下,方便日后取用. 可先直接尝试第3步,若不行,则走完全程. 1.查看/设置下NAT的网络 打开VMware Workstation, 点 ...

  8. 关于C#鼠标方面的。

    因为,遇到这样的提问,就是当点击按钮后,让按钮的位置,随着鼠标移动而移动. 思路,就是按下后记录鼠标的坐标,然后修改按钮的坐标   0: Control.PointToScreen:将指定工作区点的位 ...

  9. 天转凉了,注意保暖,好吗(需求规格说明书放在github了)

    团队项目——AI五子棋(小程序) 一.团队展示: 队名:未来的将来的明天在那里等你 小组 队员: 龙天尧(队长)(3116005190),林毓植(3116005188),黄晖朝(3116005178) ...

  10. Dapp的PVP发模式--magic-maze-2d游戏解读

    前言: 未来基于Dapp的游戏可能会多起来吧, 尤其是博彩类游戏, 由于区块链匿名特性, 加之数字货币不受国家监控, 几乎成了一个法外之地. 大量游戏团队都往之涌入. 今天讲讲当前Dapp的一种游戏模 ...