Oracle单值函数
单值函数主要是⽤来处理一个列中多⾏数据。例如将某列的字⺟数据全部转换成⼤写等等之类的。
一.哑表
在oracle中存在着⼀张虚拟的表,这个表只有⼀条记录。这个表叫做哑表(dual)。主要是⽤来校验 select 数据。这个表⾥⾯的唯一条数据就是查询出来的数据。
例子:查看1+1的结果 select 1+1 from dual;
二.字符函数
可以操作表中的列,也可以操作普通字符串
lower返回转换成⼩写的字符串 upper转换为⼤写的字符串 initcap⾸字⺟⼤写的字符串 concat连接字符串(⽀持各种类型的关系型数据库) concat的功能类似于前⾯的 ||如果想连接多个,需要嵌套使⽤; 例子: 1 select lower('HELLO') from dual; 1 select lower(last_name) from s_emp; 1 select upper('world') from dual; 1 select upper(last_name) from s_emp; 1 select initcap('hELLO') from dual; 1 select upper(userid) from s_emp; select concat('hello','world') msg from dual; select 'hello' || 'world' from dual; select concat('⻢⽼师',concat('真的','是吗')) from dual; select '⻢⽼师' || '真的' || '是吗' from dual;
substr返回截取的字符串,substr(操作项,start,len) 截取字符串 截取'hello'字符串,从第 2 个字符开始(包含第⼆个字符),截取后⾯连续的 3 个字符1 select substr('hello',2,3) from dual;
length返回字符串的⻓度,获得'world'字符串的⻓度 1 select length('world') from dual;
nvl(arg1,arg2) 如果参数为空,返回参数2 nvl2(arg1,agr2,agr3) 如果参数为空,返回参数3,不为空返回参数2 nullif(arg1,arg2) 如果参数1=参数2 那么就返回null,否则返回参数1
10.5 函数嵌套使⽤
查询 名字⾸字⺟⼤写的员⼯信息select * from s_emp where substr(last_name,1,1) = substr(initcap(last_name),1,1);
查询 最后⼀个字⺟为⼩写的员⼯信息select * from s_emp where substr(last_name,length(last_name),1) =substr(lower(last_name),length(last_name),1);
查询 员⼯⾸字⺟为 N 的员⼯信息
select * from s_emp where substr(last_name,1,1) = 'N';
10.6 数字函数
round四舍五⼊ round(arg1,arg2) arg1 :表示要进⾏四舍五⼊操作的数字 arg2 :第⼆个参数表示保留到哪⼀位,为0时表示取整数,为负数时表示往小数点前面走几位
trunc截取到某⼀位 trunc(arg1,arg2) 和 round 的⽤法⼀样,但是 trunc 只舍去不进位
mod取余 mod(arg1,arg2) 第⼀个参数表示要进⾏取余操作的数字 第⼆个参数表示参数 1 和谁取余
10.7 ⽇期函数
当前时间(sysdate) 查询系统当前⽇期 可以对⽇期进⾏加减运算,但是值得注意的是计算单位是 天 显示时间:明天的这个时候 select sysdate + 1 from dual; 显示时间:昨天的这个时候 select sysdate - 1 from dual; 显示时间:1 ⼩时之后的这个⽇期 select sysdate + 1/24 from dual;
months_between 俩个⽇期之间相差多少个⽉【单位是⽉】
30 天之后和现在相差多少个⽉ select months_between(sysdate+30,sysdate) from dual;
如果不满⼀个⽉则返回⼀个⼩数
add_months 返回⼀个⽇期数据:表示⼀个时间点,往后推 x ⽉的⽇期 当前时间往前推 4 个⽉ 1 select add_months(sysdate,-4) from dual;
next_day 返回⽇期:表示下⼀个星期⼏在哪⼀天 离当前时间最近的下⼀个星期 5 是哪⼀个天
1 select next_day(sysdate,'星期五') from dual;
last_day 返回⽇期:表示指定⽉份的最后⼀天 select last_day('3-5⽉-2015') from dual;
round 对⽇期进四舍五⼊,返回操作后的⽇期数据 把当前⽇期四舍五⼊到⽉ 注意: 15 ⽇不进,16⽇进位
select round(sysdate,'MONTH') from dual;
把当前⽇期四舍五⼊到年 注意:6 ⽉舍弃,7 ⽉进位 select round(sysdate,'YEAR') from dual;
trunc 对⽇期进⾏截取 和 round 类似,但是只舍弃不进位
select trunc(sysdate,'MONTH') from dual; select trunc(sysdate,'YEAR') from dual;
10.8 转换函数
to_char 把⽇期或者数字转换为字符 to_char (arg1,arg2) 把⽇期转换为字符 arg 1:⽇期 arg2:⽇期格式 把当前⽇期按照指定格式转换为字符串 select to_char(sysdate,'yyyy-mm-DD') from dual;
格式 yyyy 四位数的年份 rrrr 四位数的年份 yy 两位数的年份 rr 两位数的年份 mm 两位数的⽉份(数字) D ⼀周的星期⼏ DD ⼀⽉的第⼏天 DDD ⼀年的第⼏天 YEAR 英⽂的年份 MONTH 英⽂全称的⽉份 mon 英⽂简写的⽉份 ddsp 英⽂的第⼏天(⼀个⽉的) ddspth 英⽂序列数的第⼏天(⼀个⽉的) DAY 全英⽂的星期 DY 简写的英⽂星期 hh[12|24] ⼩时 默认 12 进制 mi 分钟 ss 秒 am 上下午
to_number把字符转换为数
select to_number('0100') from dual;
to_date把字符转换为⽇期 将2016-1-1转换成⽇期
select to_date(‘2016-1-1’,’yyyy-mm-dd') from dual;