单行函数主要分为以下5类:字符函数、数字函数、日期函数、转换函数、通用函数;
1、字符函数
UPPER(字符串|列)
LOWER(字符串|列)
INITCAP(字符串|列)
LENGTH(字符串|列):开头首字母大写
REPLACE(字符串|列)
SUBSTR(字符串|列,开始点[结束点]):字符串截取
oracle数据库中为了用户的查询方便,所以专门提供了一个“dual"的虚拟表。
大小写
select upper('hello')from dual;
select lower('HELLO')from dual;
select *from emp where ename=upper('&str');
select lower(ename) from emp ;
select INITCAP(ename) from emp ;
长度
select ename,LENGTH(ename) from emp ;
select ename,LENGTH(ename) from emp
where LENGTH(ename)=5;
替换
select REPLACE(ename,'A','_') from emp ;
截取
select ename, SUBSTR(ename,1,3) from emp ;
截取每个雇员姓名对的后3个字母。
select ename, SUBSTR(ename,LENGTH(ename)-2) from emp ;
select ename, SUBSTR(ename,-3) from emp ;
substr()函数截取的时候下标是从0还是从1开始?
答:在Oracle 数据库之中,substr()函数从0和1开始都是一样的。
substr()也可以设置为负数,表示由后指定截取的开始点:
2、数字函数
一共3个:
round(数字|列[保留小数的位数]):四舍五入的操作;
trunc(数字|列[保留小数的位数]):舍弃指定位置的内容;
mod(数字|数字2):取模,取余数;
select round(903.5)from dual;
select round(903.53567)from dual;
select round(903.53567),round(-903.53567), round(903.53567,-1),round(903.53567,2)from dual;
select trunc(903.53567),trunc(-903.53567), trunc(903.53567,-1),trunc(903.53567,2)from dual;
select mod(10,3)from dual;
3、日期函数
取当前日期:
select sysdate from dual;
日期计算:
日期+数字=日期 ----表示若干天后的日期
日期-数字=日期 ----表示若干天前的日期
日期-日期=数字 ----表示两个日期间的天数
select sysdate-3,sysdate+30 from dual;
select ename,sysdate-hiredate from emp;
LAST_DAY(日期): 求出指定日期的最后一天;
NEXT_DAY(日期,星期数); 求出下一个指定星期X的日期;
ADD_MONTHS(日期,数字); 求出若干月之后的日期:
MONTHS_BETWEEN(日期1,日期2); 求出两个日期之间所经历的月份;
求出本月的最后一天
select LAST_DAY(sysdate) from dual;
求出下一个周一
select NEXT_DAY(sysdate,'星期一') from dual;
求出你们学习的最晚时间
select ADD_MONTHS(sysdate,4) from dual;
求出每个雇员到今天为止的雇佣月份
select ename,hiredate,trunc(MONTHS_BETWEEN(sysdate,hiredate))from emp;
在所有的开发之中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。
4、转换函数(核心)
转换函数的主要功能是完成 数字(NUMBER) 、字符串(VARCHAR)、日期(DATE)几种数据间的互相转换的操作
一共三种转换函数:
TO_CHAR(字符串 |列,格式字符串); 将日期或者是数字变为字符串显示;
TO_DATE(字符串,格式字符串); 将字符串变为DATE的数据显示;
TO_NUMBER(字符串); 将字符变为数字显示;
---4.1
TO_CHAR()函数
select TO_CHAR(sysdate,'yyyy-mm-dd'),TO_CHAR(sysdate,'yyyy') year,TO_CHAR(sysdate,'mm') months, TO_CHAR(sysdate,'dd') day from dual;
select TO_CHAR(sysdate,'fmyyyy-mm-dd') from dual;
select TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
使用TO_CHAR()函数后,所有内容都是字符串,不再是DATE型数据,TO_CHAR()函数也
可以用于数字格式化上。这个时候每一个“9”表示一位数字的概念,而不是数字9的概念。
select TO_CHAR(847387483748,'999,999,999,999,999')from dual;
其中字母“L”,表示的是"Locale"的含义,即:当前的所在语言环境下的货币符号
select TO_CHAR(847387483748,'L999,999,999,999,999')from dual;
----4.2 TO_DATE()函数
此函数的主要功能是将一个字符串变为DATE型数据。
select TO_DATE('1989-09-12','yyyy-mm-dd')from dual;
一般此函数在更新数据库的使用较多;
-----4、3 TO_NUMBER()函数:基本不用
TO_NUMBER()函数一看就知道是将字符串变数字。
select TO_NUMBER('1')+TO_NUMBER('2')from dual;
select '1'+'2'from dual;
5、通用函数(核心)
通用函数主要有两个:NVL()、DECODE(),这两个函数算是oracle自己的特色了:
1、NVL()函数,处理null
示例:要求查询出每个雇员的全部年薪
select ename,sal,comm,(sal+comm)*12 from emp;
select ename,sal,comm,(sal+comm)*12 ,NVL(comm,0) from emp;
2、DECODE()函数:多值判断
DECODE()函数非常类似于程序中的if else语句,唯一不同的DECODE()函数判断的是数值,而不是
逻辑条件了,例如,现在要求显示全部雇员的职位,但是这些职位要求替换为中文显示:
例如,现在要求显示全部雇员的职位,但是这这些职位要求替换为中文:
CLERK:办事员;
SALESMAN:销售;
MANAGER:经理;
ANALYST:分析员;
PRESIDENT:总裁;
DECODE(数值|列,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3....)
select empno,ename,job,DECODE(job,'CLERK','办事员','SALESMAN','销售人员',
'MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁')
from emp;
1、字符函数
UPPER(字符串|列)
LOWER(字符串|列)
INITCAP(字符串|列)
LENGTH(字符串|列):开头首字母大写
REPLACE(字符串|列)
SUBSTR(字符串|列,开始点[结束点]):字符串截取
oracle数据库中为了用户的查询方便,所以专门提供了一个“dual"的虚拟表。
大小写
select upper('hello')from dual;
select lower('HELLO')from dual;
select *from emp where ename=upper('&str');
select lower(ename) from emp ;
select INITCAP(ename) from emp ;
长度
select ename,LENGTH(ename) from emp ;
select ename,LENGTH(ename) from emp
where LENGTH(ename)=5;
替换
select REPLACE(ename,'A','_') from emp ;
截取
select ename, SUBSTR(ename,1,3) from emp ;
截取每个雇员姓名对的后3个字母。
select ename, SUBSTR(ename,LENGTH(ename)-2) from emp ;
select ename, SUBSTR(ename,-3) from emp ;
substr()函数截取的时候下标是从0还是从1开始?
答:在Oracle 数据库之中,substr()函数从0和1开始都是一样的。
substr()也可以设置为负数,表示由后指定截取的开始点:
2、数字函数
一共3个:
round(数字|列[保留小数的位数]):四舍五入的操作;
trunc(数字|列[保留小数的位数]):舍弃指定位置的内容;
mod(数字|数字2):取模,取余数;
select round(903.5)from dual;
select round(903.53567)from dual;
select round(903.53567),round(-903.53567), round(903.53567,-1),round(903.53567,2)from dual;
select trunc(903.53567),trunc(-903.53567), trunc(903.53567,-1),trunc(903.53567,2)from dual;
select mod(10,3)from dual;
3、日期函数
取当前日期:
select sysdate from dual;
日期计算:
日期+数字=日期 ----表示若干天后的日期
日期-数字=日期 ----表示若干天前的日期
日期-日期=数字 ----表示两个日期间的天数
select sysdate-3,sysdate+30 from dual;
select ename,sysdate-hiredate from emp;
LAST_DAY(日期): 求出指定日期的最后一天;
NEXT_DAY(日期,星期数); 求出下一个指定星期X的日期;
ADD_MONTHS(日期,数字); 求出若干月之后的日期:
MONTHS_BETWEEN(日期1,日期2); 求出两个日期之间所经历的月份;
求出本月的最后一天
select LAST_DAY(sysdate) from dual;
求出下一个周一
select NEXT_DAY(sysdate,'星期一') from dual;
求出你们学习的最晚时间
select ADD_MONTHS(sysdate,4) from dual;
求出每个雇员到今天为止的雇佣月份
select ename,hiredate,trunc(MONTHS_BETWEEN(sysdate,hiredate))from emp;
在所有的开发之中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。
4、转换函数(核心)
转换函数的主要功能是完成 数字(NUMBER) 、字符串(VARCHAR)、日期(DATE)几种数据间的互相转换的操作
一共三种转换函数:
TO_CHAR(字符串 |列,格式字符串); 将日期或者是数字变为字符串显示;
TO_DATE(字符串,格式字符串); 将字符串变为DATE的数据显示;
TO_NUMBER(字符串); 将字符变为数字显示;
---4.1
TO_CHAR()函数
select TO_CHAR(sysdate,'yyyy-mm-dd'),TO_CHAR(sysdate,'yyyy') year,TO_CHAR(sysdate,'mm') months, TO_CHAR(sysdate,'dd') day from dual;
select TO_CHAR(sysdate,'fmyyyy-mm-dd') from dual;
select TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
使用TO_CHAR()函数后,所有内容都是字符串,不再是DATE型数据,TO_CHAR()函数也
可以用于数字格式化上。这个时候每一个“9”表示一位数字的概念,而不是数字9的概念。
select TO_CHAR(847387483748,'999,999,999,999,999')from dual;
其中字母“L”,表示的是"Locale"的含义,即:当前的所在语言环境下的货币符号
select TO_CHAR(847387483748,'L999,999,999,999,999')from dual;
----4.2 TO_DATE()函数
此函数的主要功能是将一个字符串变为DATE型数据。
select TO_DATE('1989-09-12','yyyy-mm-dd')from dual;
一般此函数在更新数据库的使用较多;
-----4、3 TO_NUMBER()函数:基本不用
TO_NUMBER()函数一看就知道是将字符串变数字。
select TO_NUMBER('1')+TO_NUMBER('2')from dual;
select '1'+'2'from dual;
5、通用函数(核心)
通用函数主要有两个:NVL()、DECODE(),这两个函数算是oracle自己的特色了:
1、NVL()函数,处理null
示例:要求查询出每个雇员的全部年薪
select ename,sal,comm,(sal+comm)*12 from emp;
select ename,sal,comm,(sal+comm)*12 ,NVL(comm,0) from emp;
2、DECODE()函数:多值判断
DECODE()函数非常类似于程序中的if else语句,唯一不同的DECODE()函数判断的是数值,而不是
逻辑条件了,例如,现在要求显示全部雇员的职位,但是这些职位要求替换为中文显示:
例如,现在要求显示全部雇员的职位,但是这这些职位要求替换为中文:
CLERK:办事员;
SALESMAN:销售;
MANAGER:经理;
ANALYST:分析员;
PRESIDENT:总裁;
DECODE(数值|列,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3....)
select empno,ename,job,DECODE(job,'CLERK','办事员','SALESMAN','销售人员',
'MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁')
from emp;