Oracle应用实战六——函数+集合

函数

字符函数

接收字符输入返回字符或者数值,dual是伪表

1. 把小写的字符转换成大小的字符

upper('smith')

2. 把大写字符变成小写字符

lower('SMITH')

3. 把首字符大写

initcap('smith')

4. 字符串的连接可以使用concat可以使用“||”建议使用“||”

concat('hello', 'world')

5. 字符串的截取,使用substr,第一个参数是源字符串,第二个参数是开始索引,第三个参数长度,开始的索引使用1和0效果相同(掌握)

substr('hello', 1,3)

6. 获取字符串的长度

length('hello')

7. 字符串替换,第一个参数是源字符串,第二个参数被替换的字符串,第三个是替换字符串

replace('hello', 'l','x')

数值函数

1.四舍五入函数:ROUND()

默认情况下ROUND四舍五入取整,可以自己指定保留的位数。

2.数值截取:TRUNC(),默认全部去掉小数,也可以指定保留的位数

3.取余数:MOD()

日期函数

Oracle中提供了很多和日期相关的函数,包括日期的加减,在日期加减时有一些规律

日期 – 数字 = 日期

日期 + 数字 = 日期

日期 – 日期 = 数字

1. 范例:查询雇员的进入公司的周数。

分析:查询雇员进入公司的天数(sysdate – 入职日期)/7就是周数

2. 获得两个时间段中的月数:MONTHS_BETWEEN()

范例:查询所有雇员进入公司的月数

3. 获得几个月后的日期:ADD_MONTHS()

范例:求出三个月后的日

转换函数

1. TO_CHAR:字符串转换函数 (掌握)

范例:查询所有的雇员将将年月日分开,此时可以使用TO_CHAR函数来拆分

拆分时需要使用通配符

年:y, 年是四位使用yyyy

月:m, 月是两位使用mm

日:d, 日是两位使用dd

在结果中10以下的月前面被被补了前导零,可以使用fm去掉前导零

TO_CHAR还可以给数字做格式化

范例:把雇员的工资按三位用“,”分隔,在oracle中“9”代表一位数字

如果在钱的前面加上国家的符号可以使用“$”代表是美元,如果要使用本地的钱的单位使用“L”

2. TO_NUMBER:数值转换函数

TO_NUMBER可以把字符串转换成数值

3. TO_DATE:日期转换函数

TO_DATE可以把字符串的数据转换成日期类型

通用函数

1.空值处理nvl

范例:查询所有的雇员的年薪

我们发现很多员工的年薪是空的,原因是很多员工的奖金是null,null和任何数值计算都是null,这时我们可以使用nvl来处理。

2.Decode函数

该函数类似if....else if...esle

语法:DECODE(col/expression, [search1,result1],[search2, result2]....[default])

Col/expression:列名或表达式

Search1,search2...:用于比较的条件

Result1, result2...:返回值

如果col/expression和Searchi匹配就返回resulti,否则返回default的默认值

范例:查询出所有雇员的职位的中文名

3.case when

CASE expr WHEN comparison_expr1 THEN return_expr1

[WHEN comparison_expr2 THEN return_expr2

WHEN comparison_exprn THEN return_exprn

ELSE else_expr]

END

select t.empno,

t.ename,

case

when t.job = 'CLERK' then

'业务员'

when t.job = 'MANAGER' then

'经理'

when t.job = 'ANALYST' then

'分析员'

when t.job = 'PRESIDENT' then

'总裁'

when t.job = 'SALESMAN' then

'销售'

else

'无业'

end

from emp t

聚合函数

1.统计记录数count()(掌握)

范例:查询出所有员工的记录数

不建议使用count(*),可以使用一个具体的列以免影响性能。

2.最小值查询min()

范例:查询出来员工最低工资

3.最大值查询max()

范例:查询出员工的最高工资

4.查询平均值avg()

范例:查询出员工的平均工资

5.求和函数sum()

范例:查询出20号部门的员工的工资总和

集合操作

并集

UNION

UNION ALL

范例:工资大于1500,或者是20号部门下的员工

select * from emp where sal>1500 UNION select * from emp where deptno=20

交集

INTERSECT

范例:工资大于1500,并且是20号部门下的员工

select * from emp where sal>1500 intersectselect * from emp where deptno=20

差集

MINUS

范例:1981年入职的普通员工

select * from emp where to_char(hiredate ,'yyyy')='1981'minusselect * from emp where job='MANAGER' or job='PRESIDENT';

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2017-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习入门

LWC 56:718. Maximum Length of Repeated Subarray

LWC 56:718. Maximum Length of Repeated Subarray 传送门:718. Maximum Length of Repea...

21960
来自专栏idba

order by 原理以及优化

一 简介 偏向于业务的(MySQL)DBA或者业务的开发者来说,order by 排序是一个常见的业务功能,将结果根据指定的字段排序,满足前端展示的需求。然而...

13730
来自专栏北京马哥教育

SQL函数汇总【精选篇】

1.绝对值 SQL:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) ...

32890
来自专栏技术专栏

hive 中 统计某字段json数组中每个value出现的次数

需要将json数组里的qd_title都提取出来转换成hive中的array数组。下面介绍两种方法

1.1K30
来自专栏Python攻城狮

MySQL高级1.mysql高级3.内置函数4.时间与字符串的相互转换

要求:表的类型必须是innodb或bdb类型(表的默认类型就是innodb),才可以对此表使用事务

19410
来自专栏Java学习123

mysql分组查询

32590
来自专栏Android Note

Android—Room数据库多表查询(Relationships)

44520
来自专栏数据和云

DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比

随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多。进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据...

38660
来自专栏chenssy

【死磕Sharding-jdbc】---SQL解析-词法分析

sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文...

17220
来自专栏C/C++基础

C++ Hash表模板

利用C++类模板实现任意类型的Hash表,提供的功能有: (1)指定shmkey或内存地址创建Hash表; (2)获取指定key元素; (3)遍历指...

54940

扫码关注云+社区

领取腾讯云代金券