1.字符串函数
字符串的索引下标从1开始,这点和其它一些语言不同。
转换大小写函数:
select upper('aAbcjdJsadf') from dual; --大写
select lower('AAADDAERAYRARE') from dual; --小写
单词首字母大写函数(所有单词,以空格区分单词):
select initcap('today is signal day') from dual;
--结果:Today Is Singal Day
字符串连接函数(相当与字符串连接符:||):
select concat('today is',' signal day') from dual;--结果:today is singal day
截取字符串函数:
substr(string, startindex, length)
参数:String要操作的字符串,startindex截取字符串起始索引(索引从1开始),length要截取字符串的长度
select substr('moves like jagger', 7, 4) from dual;
select substr('what shape of your heart', 6) from dual;
获取字符串字节数或字符数:
select length('a中国') from dual;--字符数,结果:3
select lengthb('a中国') from dual;--字节数,结果:7(由于数据库字符集编码格式不同,结果不同,一个汉字为两个或三个字节)
查找一个字符串在另一个字符串中位置:
instr(str1, str2);
参数:要在str1中查找str2字符串出现的位置,如果找到则返回索引位置,否则,返回0
select instr('abcde','cd') from dual; --结果:3
字符串填充函数:
左填充:lpad(string, length , char)
右填充:rpad(string, length , char)
参数:string 要填充的字符串,length填充后字符串的长度,char要填充的字符串
--在字符串左右填充字符至指定长度
select lpad('abcd',10, '#') from dual; --结果:######abcd
select rpad('abcd', 10, '*') from dual; --结果:abcd******
去除字符串两端特定字符
trim( char from str);
参数说明:char 是要去掉的字符,from 关键字,str要去字符的字符串
--去除两头某个字符
select trim('a' from 'aaabcdafdafjsaadda') from dual; --结果:bcdafdafjsaadd
字符串替换函数:
replace(string, char1, char2);
参数说明:string原字符串,char1被替换的字符,char2要替换的字符
select replace('adjfaadfjifec', 'a', '#') from dual; --结果:#djf##dfjifec
2.时间函数
sysdate代表当前系统时间,假设当前系统时间为2013年11月12日 13点24分5秒
select sysdate from dual;
to_date()函数:
将字符串按照某种格式解析为日期类型:
select * from t_student where birthday=to_date('1988/9/11', 'YYYY/MM/DD');
将日期时间转换成某种格式的字符串:
select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;
说明:YYYY:四位年份 MM:月,DD:日,HH24:24小时制小时(HH为12小时至时间),MI:分钟,SS:秒
to_char是将系统时间转换成特定格式的字符串,比如YYYY-MM-DD HH24:MI:SS,是将时间转换成字符串’2013-11-12 13:24:05‘
第二个参数中的’-‘也可以改为'/'等字符。
可以对date类型的数据进行加减操作,如:sysdate-1,是将当前系统时间减去1天,即:2013-11-11 13:24:05
select to_char(sysdate-1, 'YYYY-MM-DD HH24:MI:SS') from dual;
同样,也可以对两个时间类型的数据进行相减(stu为学生表,birthday为学生生日)
select sysdate-stu.birthday 天, (sysdate-stu.birthday)/7 星期, (sysdate-stu.birthday)/30 月 from t_student stu;
months_between(date1, date2)函数:
用来计算两个日期相差的月份数
select months_between(sysdate, birthday),(sysdate-birthday)/30 月 from t_student; --第二中方式不准确,原因一个月不一定是30天
add_months()函数:
在指定的日期上增加几个月
select add_months(sysdate, 1) from dual; --将系统时间增加一个月,返回:2013-12-12 13:24:05
last_day()函数:
某个日期当月的最后一天
next_day()函数:
下个日期
select last_day(sysdate) from dual;
select next_day(sysdate, '星期日') from dual; --下个离今天最近的星期日
round()函数:
对日期按指定的方式进行四舍五入
select round(sysdate, 'month') from dual; --按月对日期进行四舍五入
select round(sysdate, 'year') from dual; --按年对日期进行四舍五入
trunc()函数:
对日期按指定的方式进行截取
select trunc(sysdate, 'month') from dual;
select trunc(sysdate, 'year') from dual; --对日期进行截断
3.数字函数
round()函数,对数字按指定的位数(从小数点计算,负数代表小数点之前,正数为小数点之后)进行四舍五入
trunc()函数,对数字按指定位数(位数计算方式同round()函数)进行截取
mod()函数,求余数
select round(55.554, -1) from dual; --结果:60
select round(56.444445) from dual; --结果:56
select round(56.54565, 2) from dual; --结果:56.55
select trunc(56.3585) from dual; --结果:56
select trunc(56.3585, -1) from dual; --结果:50
select trunc(56.3585,2) from dual;--结果:56.35
select mod(100,3) from dual; 100对3求余,为1