目标:
1、了解SQL里面的转换函数
2、重点是“TO_CHAR、TO_NUMBER、TO_DATE”
3、通用函数
Agenda
一、讨论什么是数据类型的转换
lmplicit ---> 隐式的
explicit ---> 显式的
二、“TO_CHAR、TO_NUMBER、TO_DATE”的用法
三、函数嵌套
四、通用函数
--- NVL
--- NVL2
--- NULLIF
--- COALESCE
五、条件表达式
--- CASE
--- DECODE
一、讨论什么是数据类型的转换
lmplicit ---> 隐式的转换
explicit ---> 显式的转换
lmplicit ---> 隐式的转换:由oracle自动完成,比如说输入一个日期,输入的是一个字符串,oracle会自动转换成日期(日期在oracle数据库中是由数值来表示的)。
explicit ---> 显式的转换:用户通过调用oracle内嵌的转换函数进行转换
lmplicit ---> 隐式的转换

VARCHAR2和CHAR的区别:CARCHAR2是可变长度的字符串,CHAR是固定长度的字符串。
示例:


explicit ---> 显式的转换

二、“TO_CHAR、TO_NUMBER、TO_DATE”的用法
日期转换成字符串
format_model:
1、必须要用单引号引起来
2、大小写敏感
3、可以包含任何有效的日期格式类型元素,但不是并不是所有的字符都可以
4、加“fm”可以消除前导0或者空格
示例:

消除前导0示例:


除了包含年月日以外还有其它的,比如:

数值转换成字符串

示例:


即format_model要留出足够的长度容纳被转换的数值,不然就会以“#”显示出来
字符转换成数值
示例:

假如不加‘$9,999.99’会如何呢?

明显出错了
字符串转换成日期
示例:

如果‘july 4, 2008’中间有多个空格可不可以呢?

即发现是可以的,那如果加了“fx”呢?
发现不可以,即fx 代表精确匹配
三、函数嵌套

先计算内部的,即先计算F1,将结果当做F2的一个参数,然后计算F2,将结果当做F3的一个参数。
示例:

四、通用函数
--- NVL
--- NVL2
--- NULLIF
--- COALESCE
NVL
如果第一个参数不是NULL,返回的结果就是第一个结果;如果第一个参数是NULL,返回的结果就是第二个结果
NVL(commission_pct,0)
在数学表达式里面如果一个元素是NULL,那整个表达式是NULL,我们就可以使用这个表达式解决这个问题。
比如:NVL(hire_date,’01-JAN-07’)
NVL(job_id,’No Job Yet’)
示例:计算年终分红


NVL2
有三个参数,如果第一个参数是非NULL的话,那么返回第二个参数,如果第一个参数是NULL的话,那么返回第三个参数。
示例:


NULLIF
两个参数,如果两个参数相等,那么返回NULL值,如果两个参数不相等,那么就返回第一个参数的值。
示例:


COALESCE
有N多个参数,然后从左往右数,返回的结果就是碰到第一个非NULL值那么就把这个值返回出来,比如这N个参数为1到N,
那么第一个是“1”,是非NULL值,那么就把这个“1”返回出来。

五、条件表达式
--- CASE ---> SQL国际标准指定的
--- DECODE ---> oracle特定的
假如以后需要数据可移植行更好,比如说从oracle移植到其他的数据库中,那么就最好用CASE
CASE

就是expr和comparison_expr1比较,如果相等,那返回return_expr1,如果不等则和comparison_expr2比较,相等则返回return_expr2,
如果不等则和return_exprn比较,相等则返回comparison_exprn,不等就返回else_expr。
示例:

功能很强大,但是写起来很繁琐,所以oracle就增加了一个DECODE
DECODE

示例:和CASE相同,但是不那么繁琐

查询出来的结果相同
根据每个雇员不同的税率计算出一个税表
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30197839/viewspace-1973516/ ,如需转载,请注明出处,否则将追究法律责任。