Oracle 单行函数之字符、数值和日期函数

字符函数

字符函数的操作队形就是字符串 ,常用的字符函数有 lowerupperinitcap 怎么用的给大家说一下:

 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;      --从当前时间算起,下一个星期一

当然结合上面学的函数,我们还可以使用 roundtrunc 对日期型数据进行四舍五入和截断

select round(sysdate, ‘month’), round(sysdate, ‘year’) from dual ;

select trunc (sysdate, ‘month’), round(sysdate, ‘year’) from dual;

暂无评论

发表评论