单行函数:

--使用函数对表中的数据进行运算和处理,针对每行数据返回一个结果,叫做单行函数
--包括数字函数,字符函数,日期函数,转换函数,其他函数

1.数字函数

--round(m,n) 将数字m精确到小数点后n位
SELECT ROUND(123.456,1),ROUND(123.456,2),ROUND(123.456,0) FROM emp;

--oracle 中有一张系统默认的空表 dual ,可以进行辅助的查询或者运算
SELECT * FROM dual;
SELECT ROUND(123.456,1),ROUND(123.456,2),ROUND(123.456,0) FROM dual;

--n 可以不写,默认精确到个位
SELECT ROUND(123.456) FROM dual;

--n 可以为负数,精确到小数点左边n位
SELECT ROUND(126.456,-1),ROUND(173.456,-2),ROUND(823.456,-3) FROM dual;

SELECT ename,job,sal,deptno,ROUND(sal/22,2) rixin FROM emp;

--trunc(m,n) 将数字m截取到小数点后n位,其他与round函数规则一样
SELECT TRUNC(123.456,1),TRUNC(123.456,2),TRUNC(123.456,0) FROM dual;

2.字符函数

--uppper(x) 将字符串x转换成大写
--lower(x) 将字符串x转换成小写
SELECT UPPER('abcdefg') FROM dual;
SELECT LOWER(ename),LOWER(job) FROM emp;

SELECT * FROM emp
WHERE LOWER(job) = LOWER('clerk');

--length(x) 返回字符串x的长度
SELECT ename,LENGTH(ename) FROM emp;

SELECT * FROM emp
WHERE LENGTH(ename) = 5;

--substr(x,m,n) 返回从字符串x的第m个字符开始长度为n的子字符串
SELECT SUBSTR('abcdefg',2,3) FROM dual;

--n 可以不写,如果不写默认截取后面所有的字符串
SELECT ename,SUBSTR(ename,3) FROM emp;

--m 可以为负数,从右向左数第m位字符开始截取
SELECT ename,SUBSTR(ename,-1) FROM emp;

SELECT ename,SUBSTR(ename,LENGTH(ename)-1) FROM emp;

3.日期函数

--日期对格式敏感,一个日期格式的数据由世纪、年、月、日、小时、分钟、秒组成
--oracle默认的日期格式DD-MON-RR
SELECT * FROM emp;
--sysdate 系统时间
SELECT SYSDATE FROM dual;

--两个日期之间可以做减法运算,表示相差多少天
SELECT ename,hiredate,TRUNC((SYSDATE-hiredate)/365) gongling FROM emp;

--last_day(date) 返回日期date所在月份的最后一天
SELECT LAST_DAY(SYSDATE) FROM dual;
SELECT ename,hiredate,LAST_DAY(hiredate) FROM emp;

--add_months(date,n) 给日期date加上n个月
SELECT ADD_MONTHS(SYSDATE,5) FROM dual;
SELECT ename,hiredate,ADD_MONTHS(hiredate,3) FROM emp;

4.转换函数
--oracle中数据类型的转换有2种:明确和隐含的数据类型转换
--隐含的数据类型转换是指系统自动完成的不需要用户特别执行的数据类型转换
--数字和字符之间通常可以进行隐含的数据类型转换
--数字可以直接看作是字符串,具有数字特征的字符串也可以自动转换成数字
SELECT * FROM emp
WHERE deptno = '10';

--明确的数据类型转换就是使用转换函数

--to_char(date,'format') 将日期date转换成格式为format的字符串
--YYYY 表示四位的年份数字,YEAR 表示年份的拼写
--MM 表示两位月份数字,MONTH 表示月份的拼写
--DD 表示两位日期数字,DAY 表示星期的拼写
--分隔符可以自定义(: ; - _ 空格……)

SELECT SYSDATE,TO_CHAR(SYSDATE,'YYYYMMDD') FROM dual;
SELECT hiredate,TO_CHAR(hiredate,'YYYY:MM:DD') FROM emp;

--查找emp表中1981年6月1日之前入职的员工
SELECT * FROM emp
WHERE TO_CHAR(hiredate,'YYYYMMDD') < '19810601';

--年月日的拼写和数字可以混合使用
SELECT hiredate,TO_CHAR(hiredate,'YEAR:MONTH:DAY') FROM emp;

SELECT hiredate,TO_CHAR(hiredate,'YYYY:MONTH:DD') FROM emp;

--年月日的顺序可以自定义,分隔符也可以混合使用
SELECT hiredate,TO_CHAR(hiredate,'MONTH:DD YYYY') FROM emp;

--在format之前加上fm可以去掉无意义的0或者空格
SELECT hiredate,TO_CHAR(hiredate,'fmMONTH:DD YYYY') FROM emp;

--年月日可以不完整,只转换其中的一部分
SELECT hiredate,TO_CHAR(hiredate,'YYYY') FROM emp;
SELECT hiredate,TO_CHAR(hiredate,'MM') FROM emp;

--to_char(n,'format') 将数字n转换成格式为format的字符串
--9 代表一位数字
--0 代表一位数字,如果位数不足时会使用0补齐
-- .  代表小数点,不能出现在开头和结尾
--,代表分隔符,只能出现在整数部分的中间
SELECT sal,TO_CHAR(sal,'99999.99') FROM emp;
SELECT sal,TO_CHAR(sal,'00000.00') FROM emp;

--分隔符惯例是三位一分隔,也可以自定义
SELECT sal,TO_CHAR(sal,'99,999.99') FROM emp;
SELECT sal,TO_CHAR(sal,'9,9,9,9,9.99') FROM emp;

--货币单位$,当地货币L
SELECT sal,TO_CHAR(sal,'$99,999.99') FROM emp;

--to_date(x,'format') 将字符串x转换成日期
SELECT TO_DATE('20170801','YYYYMMDD') FROM dual;

SELECT TO_DATE('20170801','YYYYDDMM') FROM dual;

--年月日可以不完整,系统会自动将日期补齐为完整的格式

--如果不定义年份和月份,会用当前系统事件所在的年份和月份补齐
SELECT TO_DATE('0801','MMDD') FROM dual;
SELECT TO_DATE('201325','YYYYDD') FROM dual;

--如果不定义天数,会用当月第一天补齐
SELECT TO_DATE('201904','YYYYMM') FROM dual;
SELECT TO_DATE('2019','YYYY') FROM dual;

--查找emp表中1981年6月1日之前入职的员工
SELECT * FROM emp
WHERE hiredate < TO_DATE('19810601','YYYYMMDD');

5.其他函数

--nvl(x,y) 判断x的值,如果x不为空,则返回x,如果x为空则返回y
SELECT ename,job,sal,comm,12*(sal+NVL(comm,0)) FROM emp;

--x 和 y 的数据类型必须一致
SELECT ename,job,sal,NVL(TO_CHAR(mgr),'BOSS') FROM emp;

--nvl2(x,y,z) 判断x的值,如果x不为空则返回y,如果x为空则返回z
--y 和 z 的数据类型必须一致
SELECT ename,job,sal,mgr,NVL2(mgr,'EMPLOYEE','BOSS') FROM emp;

--decode 针对不同的数据返回不同结果
/*
decode(x,value1,result1,
value2,result2,
...
valueN,resultN,
default)
判断 x 的值,当x = value1 时返回result1
当x = value2 时返回result2
……
当x = valueN 时返回resultN
以上条件都不满足时返回default默认值
*/
--需要对emp表中不同职位的员工涨不同幅度的工资
SELECT ename,job,sal,deptno,
DECODE(job,'CLERK',sal+500,
'SALESMAN',sal+300,
'MANAGER',sal+200,
sal) addsal
FROM emp;

【练习】
1.用一个sql语句完成在字符串”hello”左右各添加5个*,
使其最终返回*****hello*****(用2种方法实现)
SELECT RPAD(LPAD('hello',10,'*'),15,'*') FROM dual;
SELECT '*****'||'hello'||'*****' FROM dual;
SELECT CONCAT('*****',CONCAT('hello','*****')) FROM dual;

2.写一条sql语句返回”abcdefg”的后三位字符“efg”,并转换成大写
SELECT UPPER(SUBSTR('abcdefg',-3)) FROM dual;
SELECT UPPER(LTRIM('abcdefg','abcd')) FROM dual;

3.查询emp表,显示删除掉第一个字符后的员工姓名
(如员工ALLEN,显示为LLEN)(2种方法实现)
SELECT ename,SUBSTR(ename,2) FROM emp;
SELECT ename,LTRIM(ename,SUBSTR(ename,1,1)) FROM emp;

4.查询emp表,显示姓名中不包含字符’A’的员工信息
SELECT * FROM emp
WHERE ename NOT LIKE '%A%';

--instr(x,y,m,n) 返回字符串y从字符串x第m位开始出现第n次的位置,如果没有出现则返回0
SELECT INSTR('abcabcabccadbda','a',5,4) FROM dual;
--m和n的默认值都为1
SELECT ename,INSTR(ename,'A') FROM emp;

SELECT * FROM emp
WHERE INSTR(ename,'A') = 0;

5.查询emp表,使用员工姓名的第一个字符将员工姓名从左边补齐到长度为10
SELECT LPAD(ename,10,SUBSTR(ename,1,1)) FROM emp;

6.查询emp表,显示6月份入职的员工信息
SELECT * FROM emp
WHERE TO_CHAR(hiredate,'MM') = 6;

7.查询在某个月倒数第三天入职的员工信息
SELECT * FROM emp
WHERE hiredate = LAST_DAY(hiredate) - 2;

8.写一条sql语句查询员工编号、员工姓名、工资、部门号,
要求当员工在10号部门时,显示’财务部’,20号部门时显示’研发部’,
30号部门时显示’销售部’,其余部门显示’未知部门’
SELECT empno,ename,sal,deptno,
DECODE(deptno,10,'Finance',
20,'Research',
30,'Sales',
'Unknown') deptname
FROM emp;

Oracle-DQL 3- 单行函数的更多相关文章

  1. Oracle中的单行函数

    Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...

  2. Oracle数据库之六 单行函数

    六.单行函数 6.1.认识单行函数 ​ 函数就是和 Java 语言之中的方法的功能是一样的,都是为了完成某些特定操作的功能支持,而在 Oracle 数据库里面也包含了大量的单行函数,这些函数掌握了以后 ...

  3. Oracle Single-Row Functions(单行函数)——NULL-Related Functions

    参考资料:http://docs.oracle.com/database/122/SQLRF/Functions.htm#SQLRF006 Single-row functions return a ...

  4. Oracle系列四 单行函数查询语句

    单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...

  5. oracle篇 之 单行函数

    一.分类 1.单行函数:需要处理的行数和返回结果的行数相等(单行进单行出) 2.多行函数(组函数):返回结果的行数少于要处理的行数(多行进单行出) 二.字符处理相关函数 1.lower:字符串转换成小 ...

  6. Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

    PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...

  7. Oracle 单行函数

    一.什么是函数 任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数. 二.单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果.单行函数可以接受一 ...

  8. Oracle笔记(三)单行函数

    -函数 函数像一个黑盒子一样(看不到里边的构造),有参数返回值,可以为我们完成一定的功能. -单行 这种函数会对结果中的每一行计算一次,每行返回一个结果,单行概念区别于分组函数. 单行函数主要分为以下 ...

  9. Oracle单行函数笔记

    Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...

  10. Oracle Day2 过滤、排序、单行函数

    1.过滤和排序 SQL> --查询10号部门的所有员工信息 SQL> select * from emp ; 未选定行 SQL> ed SP2: 无法创建保存文件 "afi ...

随机推荐

  1. Cogs 734. [网络流24题] 方格取数问题(最大闭合子图)

    [网络流24题] 方格取数问题 ★★☆ 输入文件:grid.in 输出文件:grid.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 在一个有m*n 个方格的棋盘中,每个方格 ...

  2. CF1204B

    CF1204B-Mislove Has Lost an Array 题意: 给你n,l,r 表示在区间1-n内至少有l个不相同的数至多有r个不相同的数,而且这些数不是1就是偶数而且每个偶数/2得到的数 ...

  3. break语句与continue语句

    break:终止该层循环: continue:跳过该层循环 注: ①:若这两个语句离开应用范围,存在是没有意义的. ②:这个两个语句后面都不能有语句,因为执行不到. ③:continue语句是跳过本次 ...

  4. 【零基础】speech driven animation中文安装使用指南

    注:原项目名叫Speech-Driven Animation,所以我这里就简称为SDA 开局一张图,后面自动编 相信前段时间爆火的DeepNude(AI扒衣)让很多人惊掉了大牙,AI还能干这个?!如果 ...

  5. FutureTask用法及解析

    1 FutureTask概念 FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提空 start cancel 操作,可以查询计算是否已经完成,并且可以获取 ...

  6. Nginx之共享内存与slab机制

    1. 共享内存 在 Nginx 里,一块完整的共享内存以结构体 ngx_shm_zone_t 来封装,如下: typedef struct ngx_shm_zone_s ngx_shm_zone_t; ...

  7. LeetCode 221. 最大正方形(Maximal Square)

    题目描述 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: ...

  8. chrome中如何查看元素的hover事件

    chrome中如何查看元素的hover事件 一.总结 一句话总结: Elements->Styles里面可以看到":hov":点开选择":hover"就可 ...

  9. dubbo服务provider方打印警告日志,getDeserializer - Hessian/Burla 'xxx' is an unknown class

    2018-09-12 16:16:44 WARN [New I/O worker #1] SerializerFactory.java:652 getDeserializer - Hessian/Bu ...

  10. *Scala API - 并发编程