字符函数
字符函数的操作队形就是字符串 ,常用的字符函数有 lower、upper、initcap 怎么用的给大家说一下:
select lower('HeLlo, WORld') from dual # 转小写 select upper('HellO, woRld') from dual # 转大写 select initcap('hello, world') from dual # 首字母大写
还有字符串截取函数 substr()
可以一有两个值,也可以有三个值
substr(a, b) :从a中,第b位开始取(计数从1开始),取到结尾
substr(a, b, c) :从a中,第b位开始,向右取c位。
select substr('helloworld', 3) from dua; select substr('hello world', 3, 5) from dual;
统计字符串字节数函数 length( )
需要注意的是字节数中英文是有差异的。中文GBK编码的 一个汉字是两个字节,UTF-8编码的一个汉字是3个字节
select length('www.zploo.com') 字符数, lengthb('www.zploo.com') 字节数 from dual;
字符串查找函数 instr( )
在母串中查找子串, 找到返回下标,计数从1开始。没有返回0
select instr('www.zploo.com', 'zpl') from dual;
字符填充函数: lpad 左填充 和 rpad右填充
三个参数分别是:参1:待填充的字符串,参2:填充后字符串的总长度(字节), 参3:填充什么
select lpad('abcd', 10, '*') 左, rpad('abcd', 10, '#') 右 from dual; select lpad('abcd', 15, '你')左填充, rpad('abcd', 16, '我') 右填充 from dual;
去除指定字符串函数 trim()
去掉指定的字符, 注意语法:在两个参数之间有一个from 关键字
select trim('o' from 'zploo') from dual;
字符串替换函数 replace( )
这个函数的功能很明了直接看怎么用吧
select replace('zploo', 'o', '*') from dual; select replace('zploo', 'o', '') from dual; #也可以用来删除字符
数值函数
常用的数值函数有 round:四舍五入 trunc:截断 mod:求余 这么几个
四舍五入函数 round( )
round(45.926, 2) 2表达的含义是保留两位小数,第二个参数如果是0可以省略不写。
select round(45.926, 2) 一, round(45.926, 1) 二, round(45.926, 0) 三, round(45.926, -1) 四, round(45.926, -2) 五 from dual;
截断函数 trunc()
直接将指位置后门的数值舍弃,和 round函数用法相同
select trunc(45.926, 2) 一, trunc(45.926, 1) 二, trunc(45.926, 0) 三, trunc(45.926, -1) 四, trunc(45.926, -2) 五 from dual;
求余函数 mod()
select mod(1600, 600) from dual;
时间函数
在oracle中日期类型的数据,既有日期部分也有时间部分,可以使用 select sysdate from dual; 查看当前时间,由于oracle的默认格式是只有日期没有时间的,所以只能看到日期。可以使用 to_char 函数来指定时间输出格式:
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual; --显示当前时间 格式如: 2015-12-25 15:58:08 select tochar(sysdate, 'day') from dual; --显示今天是是星期几
sysdate是Oracle自带的系统变量,可以对日期进行加减操作,得到的结果仍未日期,单位是: 天 。既然一个日期型的数据加上或者减去一个数字得到的结果仍为日期,两个日期相减,得到的就是相差的天数。
sysdate 今天
sysdate+1 明天
sysdate-1 昨天
select (sysdate-1) 昨天, (sysdate) 今天, (sysdate + 1) 明天 from dual; select to_char(sysdate-1, 'yyyy-mm-dd') 昨天, to_char(sysdate, 'yyyy-mm-dd') 今天, to_char(sysdate+1, 'yyyy-mm-dd') 明天 from dual;
特别注意:日期和日期之间是不能相加的,只能相减。日期只能和数字相加!
由于日期的特性:一个月有28天、29天、30天、31天 不等的情况,要想精确计算两个日期之间相差几个月就要使用oracle给提供的一些日期函数了
计算两个日期间相差的月份 months_between()
select ename, hiredate, (sysdate-hiredate)/30 一, months_between(sysdate, hiredate) 二 from emp; --对比一下简单的将日期除去30 和使用months_between函数得到结果的误差
计算几个月后是哪年、哪月、哪天 add_months()
这个函数的主要的作用就是在某个日期值上 加上多少个月 (如果加的是正数就向后计算,如果是负数就向后计算)后 是是哪年、哪月、哪天
select add_moths(sysdate, 95) 哪一天 from dual; --计算95个月后是哪年、哪月、哪天
计算日期所在月的最后一天 last_day()
LAST_DAY函数返回指定日期对应月份的最后一天
select last_day(sysdate) from dual;
计算下一个日期(如:星期一,星期六等)的时间 netx_day()
select next_day(sysdate, '星期一') from dual; --从当前时间算起,下一个星期一
当然结合上面学的函数,我们还可以使用 round、trunc 对日期型数据进行四舍五入和截断
select round(sysdate, ‘month’), round(sysdate, ‘year’) from dual ;
select trunc (sysdate, ‘month’), round(sysdate, ‘year’) from dual;