SQL学习之函数,基于Oracle下的HR用户(一)
SQL学习之函数,基于Oracle下的HR用户(一)
3.1.1 什么是函数
函数:是数据库产品中提供的能够处理查询结果的方法。函数能够用于下面的目的:
? 执行数据计算
? 修改单个数据项
? 格式化显示的日期和数字
? 转换列数据类型
? 函数有输入参数,并且总有一个返回值。
3.1.2 函数类型
单行函数:这些函数仅对单个行进行运算,并且每行返回一个结果。
多行函数(聚合函数):这些函数能够操纵成组的行,每个行组给出一个结果,这些函数也被称为组函数。
3.1.3 函数语法
function_name(arg1,arg2,…)
function_name:是函数的名字。
arg1, arg2:是由函数使用的任意参数。参数可以是一个列名、用户提供的常数、变量值、或者一个表达式。
3.2 单行函数
3.2.1 单行函数的特性包括:
? 作用于每一个返回行,每行返回一个结果
? 可能需要一个或多个参数
? 可以修改结果集的数据类型
? 可以嵌套
? 可能返回一个与参数不同类型的数据值
? 能够用在 SELECT、WHERE 和 ORDER BY 子句中
3.2.2 单行函数分类
字符函数:接受字符输入,可以返回字符或者数字值
数字函数:接受数字输入,返回数字值
日期函数:对 DATE 数据类型的值进行运算 (除MONTHS_BETWEEN 函数返回一个数字,所有日期函数都返回一个 DATE 数据类型的值。)
转换函数:从一个数据类型到另一个数据类型转换一个值
通用函数:
? NVL
? NVL2 ? NULLIF ? COALSECE
? CASE
? DECODE
3.3 字符函数
字符函数:单行字符函数接受字符数据作为输入,既可以返回字符值也可以返回数字值。
3.3.1 字符函数分类
? 大小写处理函数
? 字符处理函数
大小写处理函数结果含义lower(‘SQL Course’)sql course将字符串转换为小写
upper(‘SQL course’)SQL COURSE将字符转换为大写
initcap(‘SQL Course’)Sql Course将单词首字母转换成大写
3.3.3 示例一
查询员工表,使用 “ The Job id for ”链接转换大写格式后的员工姓名,并使用“ is ” 字符串链接他们工作 ID ,要求将工作 ID 转换小写格式。修改列名为“ EMPLOYEE DETAILS”。
select ' The job id for'||upper(last_name)||'is'|| lower(job_id) "EMPLOYEE DETAILS" from employees;
3.3.4 示例二
显示雇员 higgins 的雇员号、姓名和部门号
select employee_id,last_name,department_id from employees where last_name = initcap('higgins');
3.4 字符处理函数
dual 表:dual 是一张只有一个字段,一行记录的表。dual 表也称之为’伪表’,因为他不存储主题数据。如果我们不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们想得到的信息,并要通过 select 完成时,就要借助 dual 表来满足结构化查询语言的格式。
函数结果说明concat(‘hello’,‘Word’)helloWord两个字符串连接
substr(‘HelloWord’,1,5)Hello根据指定参数截取字符串
length(‘helloword’)10计算字符串长度
instr(‘helloword’,‘w’)6返回指定字符的位置
lpad(salary, 10 , ‘*’)*****24000按指定参数在字符串前面添加指定字符
rpad(salary, 10, ‘*’)24000*****按指定参数在字符串后面添加指定字符
trim(‘H’ from ‘Hello Word’)elloWord去掉指定字符
CONCAT(arg1,arg2):连接值在一起 (CONCAT 函数有两个输入参数)
arg1:字符串类型。字符拼接的值。
arg2:字符串类型。字符拼接的值。
SUBSTR(arg1,arg2,arg3):截取子串。
arg1:字符串类型。原字符串,
arg2:整数类型。开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,- 2 则表示倒是第二位以此类推),
arg3:整数类型。截取个数。
SUBSTR(arg1,arg2):截取子串。
arg1:字符串类型。原字符串。
arg2:开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则表示倒是第二位以此类推)截取到末尾。
LENGTH(arg1):以数字值显示一个字符串的长度。
arg1:字符串类型。计算长度的字符串。
INSTR(arg1,arg2):找到一个给定字符的数字位置。
arg1:字符串类型。原字符串。
arg2:字符串类型。查找内容。
INSTR(arg1,arg2,arg3,arg4):指定查找位置以及出现的次数。
arg1:字符串类型。原字符串。
arg2:字符串类型。查找内容。
arg3:整数类型。开始位置。
arg4:整数类型。第几次出现。
LPAD(arg1,arg2,arg3):用给定的字符左填充字符串到给定的长
度。
arg1:字符串类型。原字符串。
arg2:整数类型。总长度。
arg3:字符串类型。填充的子字符串。
RPAD(arg1,arg2,arg3):用给定的字符右填充字符串到给定的长度。
arg1:字符串类型。原字符串。
arg2:整数类型。总长度。
arg3:字符串类型。填充的子字符串。
TRIM(arg1):从一个字符串中去除头(leading)或尾(trailing)或头尾两侧(both)的字符 (默认为头尾两侧) 如果 trim_character 或 trim_source 是一个文字字符,必须放在单引号中。
arg1 需要操作的字符串。FROM 为关键字。
格式 1:需要去掉的内容 FROM 原字符串
格式 2:leading|trailing|both 需要去掉的内容 FROM 原字符
串。
--去掉头尾两侧方法一:
select trim('H from HelloWorldH') from dual;
--去掉头尾两侧方法二:
select trim(both 'H' from 'HelloWorldH') from dual;
--去掉头:
select trim(leading 'H' from 'HelloWorldH') from dual;
--去掉尾:
select trim(trailing 'H' from 'HelloWorldH') from dual;
REPLACE(arg1,arg2,arg3):REPLACE 函数是用另外一个值来替代串中的某个值。
arg1:字符串类型。原字符串。
arg2:字符串类型。需要替换的子串。
arg3:字符串类型。替换的内容。
3.4.1 示例一
--显示所有工作岗位名称从第 4 个字符位置开始包含字符串 REP 的雇员的信息,将雇员的姓和名连接显示在一起,还显示雇员名的长度,以及名字中字母 a 的位置。
select concat(first_name,last_name),length(last_na me),instr(last_name,'a') from employees where substr(job_id,4)='REP';
3.4.2 示例二
--显示名字是以 n 结束的雇员的数据,将雇员的姓和名连接显示在一起,还显示雇员名的长度,以及名字中字母 a 的位置。
select concat(first_name,last_name),length(last_name),instr(last_name,'a') from employees where substr(last_name,-1)='n';
3.4.3 示例三
--将手机号中间四位用星号代替。
select replace('13622329860',substr('13622329860',4,4),'****') from dual;
3.5 数字函数
函数结果说明round(45.926,2)45.93四舍五入指定小数的值
trunc(45.926,2)45.92截取小数点后的位数,不做四舍五入处理
mod(1600,300)100取余
ROUND(arg1,arg2):四舍五入指定小数的值。
arg1:数字类型。原数字。
arg2:整数类型。小数点保留的位数,可以是一个负数。负数则表示指定整数的位置。
ROUND(arg1):四舍五入保留整数。
arg1:数字类型。原数字。
arg2:整数类型。小数点保留的位数。
TRUNC(arg1,arg2):截断指定小数的值,不做四舍五入处理。
arg1:数字类型。原数字。
arg2:整数类型。小数点保留的位数,可以使一个负数。负数则表示指定整数的位置。
TRUNC(arg1):四舍五入保留整数。
arg1:数字类型。原数字。
arg2:整数
类型。小数点保留的位数。
MOD(arg1,arg2):取余。
arg1:数字类型。被除数。
arg2:数字类型。除数。
3.5.1 示例一
计算所有是销售代表(SA_REP)的雇员的工资被 5000 除后的余数。
select last_name,salary,mod(salary,5000)
from employees where job_id ='SA_REP';
SQL学习之函数,基于Oracle下的HR用户(一)相关教程
MySQL优化步骤(四)-应用优化及锁
MySQL优化步骤(四)-应用优化及锁 ? 前面记录了对SQL语句的一些优化,但是由于MySQL数据库本身的一些局限性能局限,对连接数据库的一些应用同样应该做一些优化。 1.1、使用数据库连接池 对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关
通俗易懂MySQL事务与索引
通俗易懂MySQL事务与索引 MySQL 谈到事务一般都是以下四点 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据的完整性必须保持一致。 隔离性(Isolation) 事务的隔
MySQL主从、主主互备
MySQL主从、主主互备 为什么80%的码农都做不了架构师? Docker部署MySQL主/从复制集群搭建 一共三个文件,按需求修改配置;保存文件。 vim DockerfileFROM mysql:5.7COPY replica.sh /docker-entrypoint-initdb.d/##########################################
mysql InnoDB UUID 主键 性能优化【性能分析篇】.md
mysql InnoDB UUID 主键 性能优化【性能分析篇】.md 为什么80%的码农都做不了架构师? mysql uuid 主键 性能优化【性能分析篇】.mdmysql InnoDB UUID 主键 性能优化【实践篇】.md 有序uuidmysql InnoDB UUID 主键 性能优化【原理篇】.mdmysql InnoDB UUID 主
mysql InnoDB UUID 主键 性能优化【原理篇】.md
mysql InnoDB UUID 主键 性能优化【原理篇】.md 为什么80%的码农都做不了架构师? mysql InnoDB uuid 主键 性能优化【原理篇】.mdmysql InnoDB UUID 主键 性能优化【实践篇】.md 有序uuidmysql InnoDB UUID 主键 性能优化【原理篇】.mdmysql InnoDB UUID 主键
koa+mysql 使用教程
koa+mysql 使用教程 初次探索 node, 与大家分享下项目搭建的过程, 有不对的地方欢迎指出 创建项目 安装脚手架 npm install -g koa-generator 使用 ejs 引擎创建名为 project 的项目 koa2 -e project 启动 进入项目 cd project 安装依赖 npm install 运行 yarn
Mysql SQL优化
Mysql SQL优化 1.Mysql逻辑分层,及存储引擎 连接层:提供与客户端连接的服务; 服务层: 提供各种用户使用的接口(select.) 提供SQL优化器(Mysql Query Optimizer) 引擎层:提供了各种存储数据的方式(InnoDB、MyISAM); 存储层:存储数据; 常用执行引擎有: In