Oracle-DQL 3- 单行函数
单行函数:
--使用函数对表中的数据进行运算和处理,针对每行数据返回一个结果,叫做单行函数
--包括数字函数,字符函数,日期函数,转换函数,其他函数
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- 单行函数的更多相关文章
- Oracle中的单行函数
Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...
- Oracle数据库之六 单行函数
六.单行函数 6.1.认识单行函数 函数就是和 Java 语言之中的方法的功能是一样的,都是为了完成某些特定操作的功能支持,而在 Oracle 数据库里面也包含了大量的单行函数,这些函数掌握了以后 ...
- Oracle Single-Row Functions(单行函数)——NULL-Related Functions
参考资料:http://docs.oracle.com/database/122/SQLRF/Functions.htm#SQLRF006 Single-row functions return a ...
- Oracle系列四 单行函数查询语句
单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...
- oracle篇 之 单行函数
一.分类 1.单行函数:需要处理的行数和返回结果的行数相等(单行进单行出) 2.多行函数(组函数):返回结果的行数少于要处理的行数(多行进单行出) 二.字符处理相关函数 1.lower:字符串转换成小 ...
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
- Oracle 单行函数
一.什么是函数 任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数. 二.单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果.单行函数可以接受一 ...
- Oracle笔记(三)单行函数
-函数 函数像一个黑盒子一样(看不到里边的构造),有参数返回值,可以为我们完成一定的功能. -单行 这种函数会对结果中的每一行计算一次,每行返回一个结果,单行概念区别于分组函数. 单行函数主要分为以下 ...
- Oracle单行函数笔记
Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度se ...
- Oracle Day2 过滤、排序、单行函数
1.过滤和排序 SQL> --查询10号部门的所有员工信息 SQL> select * from emp ; 未选定行 SQL> ed SP2: 无法创建保存文件 "afi ...
随机推荐
- Vue 项目中对路由文件进行拆分(解构的方法)
项目需求场景: 在开发项目过程中,在项目过于庞大,路由信息非常多的情况下,如果将路由配置信息都放在一个文件里面,那么这个JS是不方便维护的, 那么,这个时候需要我们把这个庞大的路由文件,根据项目功能分 ...
- 《30天自制操作系统》学习笔记--Mac环境搭建
弄了三天了,终于弄好了,先说结果,就是作者在网站上放了os x的工具(hrb.osask.jp,也有linux下的工具,可以自己去下载),也就是说我白忙活了三天... 再说一下这几天都干啥了,主要是想 ...
- 数据结构实验之链表九:双向链表(SDUT 2054)
#include <bits/stdc++.h> using namespace std; typedef struct node { int data; struct node *nex ...
- python 生成螺旋矩阵
对于任意 m*n 矩阵,将 1~m*n 的数字按照螺旋规则在矩阵中排列. 如 m=3,n=3,期望结果为: [ [ , , ], [ , , ], [ , , ] ] 以下代码支持方阵以及非方阵. c ...
- Contos 安装Tomcat
# 下载安装包 wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.40/bin/apache-tomcat-8. ...
- 【转】HDU 6194 string string string (2017沈阳网赛-后缀数组)
转自:http://blog.csdn.net/aozil_yang/article/details/77929216 题意: 告诉你一个字符串和k , 求这个字符串中有多少不同的子串恰好出现了k 次 ...
- Jmeter工具做接口测试
一.安装Jmeter 1.安装JDK ①下载jdk,到官网下载jdk,地址:http://jmeter.apache.org/download_jmeter.cgi ② 安装jdk(Oracle官网下 ...
- linux磁盘内存满了?删除大文件依然不起作用
好久没有更新博客了,但并不代表自己没有遇到技术问题了.遇到了一大堆,也解决了一大堆.只是没有记下来的欲望了,似乎大脑就这样,忘不掉.啥都忘不掉了,即使忘掉了也知道如何百度了. 查看目录大小命令 du命 ...
- 启动eclipse导致Tomcat的配置文件重置
转: 启动eclipse导致Tomcat的配置文件重置 导入一个项目,需要在Tomcat的配置文件中配置JNDI数据源,需要修改Tomcat下的server.xml文件.但是当我们修改完后重启Tomc ...
- hadoop安装和环境配置---1
一.安装java 1.下载 : yum install java-1.7.0-openjdk 2.配置环境变量 vim /etc/profile 要先看自己安装的java全名 然后再环境配置 expo ...