`

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_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与round的区别***********************/
cast 是进行类型转换的,可以针对各种Oracle数据类型.修改的是用户的数据类型.
round只是修改的数据显示格式. 对数据做四舍五入.
类似的函数还有ceil(取此数据的最小整数). trunc( 取整函数.)

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

 

分享到:
评论

相关推荐

    oracle cast (multiset()as )用法

    通过实例介绍了 cast(multiset() as) 的使用方法,以处理嵌套表的操作

    hive、oracle常用函数对照表

    hive、oracle常用函数对照表

    SQLServer和Oracle常用函数对比

    SQLServer和Oracle是大家经常用到的数据库,在此感谢作者总结出这些常用函数以供大家参考。 数学函数  1.绝对值  S:select abs(-1) value  O:select abs(-1) value from dual  2.取整(大)  S:select ...

    QOCI_oracle11g_qt5.12.7z

    Qt5.12 oracle11g 64位下编译oci驱动 (win7,win10...替换成 OCIBindByPos 函数 和 其中一个参数 转换 reinterpret_cast*&gt;(bindColumn.lengths), 编译后即生成 release版和debug版的2个文件 qsqlsoci.dll libqsqloci.a

    oracle常用函数

    S:select abs(-1) value  O:select abs(-1) value from dual  2.... S:select ceiling(-1.001) value  O:select ceil(-1.001) ... S:select cast(-1.002 as int) value  O:select trunc(-1.002) value from dual

    精通SQL 结构化查询语言详解

    10.1.2 在子查询中使用聚合函数  10.2 创建和使用返回多行的子查询  10.2.1 IN子查询  10.2.2 IN子查询实现集合交和集合差运算 10.2.3 EXISTS子查询  10.2.4 EXISTS子查询实现两表交集  10.2.5 SOME/ALL...

    关于oracle中clob字段查询慢的问题及解决方法

    最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...

    《Oracle Database编程指南》13-05:转换函数(Conversion Functions)

    CAST CHARTOROWID COMPOSE CONVERT DECOMPOSE HEXTORAW NUMTODSINTERVAL NUMTOYMINTERVAL RAWTOHEX RAWTONHEX ROWIDTOCHAR ROWIDTONCHAR SCN_TO_TIMESTAMP TIMESTAMP_TO_SCN TO_BINARY_DOUBLE TO_BINARY_FL

    精通SQL--结构化查询语言详解

    10.1.2 在子查询中使用聚合函数 188 10.2 创建和使用返回多行的子查询 190 10.2.1 in子查询 190 10.2.2 in子查询实现集合交和集合差运算 191 10.2.3 exists子查询 192 10.2.4 exists子查询实现两表交集 194 ...

    mysql与mssql的md5加密语句

    您可能感兴趣的文章:MySQL加密和解密实例详解Java、JavaScript、Oracle、MySQL中实现的MD5加密算法分享PHP MySQL应用中使用XOR运算加密算法分享MySQL 加密/压缩函数mysql双向加密解密方式用法详解MySQL 整表加密...

    Oracle中的MD5加密详解

    DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =&gt;’abc’) a from Dual时,却有错误提示,看来该函数只能直接在程序包中调用,不能直接应用于...

    精通sql结构化查询语句

    9.3.4 在内连接中使用聚合函数 9.4 外连接 9.4.1 左外连接 9.4.2 右外连接 9.4.3 全外连接 9.4.4 在外连接中使用聚合函数 9.5 交叉连接 9.5.l 交叉连接的定义 9.5.2 交叉连接举例 9.6 多表连接的综合应用 9.6.1 内...

    oracle日期时间型timestamp的深入理解

     2、timestamp转成date型 代码如下: select cast(to_timestamp(’01-10月-08 07.46.41.000000000 上午’,’dd-MON-yy hh:mi:ss.ff AM’) as date) timestamp_to_datefrom dual; 3、date型转成timestamp 代码如下:...

    java面试800题

    答案是否定的,比如在这个列中使用‘%sdfd%’来进行模糊查询 Q0034 给定了一些创建数据库试图的SQL语句问什么条件下才可以对试图执行修改,增加,删除操作 特别强调了WITH CHECK OPTION这个约束的含义,使用,...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样...

    SQL语法大全

    3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\' order by 字段名 [desc]" ...

Global site tag (gtag.js) - Google Analytics