每种数据库都会在标准SQL基础上扩展函数库。一般并不推荐在Java程序中使用特定数据库的函数,这将导致程序代码与特定数据库耦合,造成移植性问题。
字符函数
小写转大写函数upper
select * from emp where ename=upper('smith') ;
大写转小写函数lower
select lower(ename) from emp ;
将单词第一个字母大写函数 initcap
select initcap(ename) as 姓名 from emp ;
字符串连接函数 concat
select concat(empno ,ename) from emp ;
// 字符串连接可使用||运算符实现
select empno||ename from emp ;
字符串截取函数 substr
select substr(ename, 1 , 3) from emp ;
select substr(ename, 0 , 3) from emp ;
// 从第一个开始取,取3个(0和1都表示第一个)
字符串长度函数 length
select * from emp where length(ename)=5 ;
字符串内容替换函数 replace
select replace(ename , 'S' , 'X') from emp ;
数学函数
四舍五入函数 round
select round(789.536 , 2) from dual ; //dual为哑元表,是缓存中的虚拟表
select round(789.536) from dual ;
select round(789.536 , -2) from dual ;
截断小数位函数 trunc
select trunc(789.536 , 2) from dual ;
select trunc (789.536) from dual ;
select trunc (789.536 , -2) from dual ;
返回天花板值函数ceil(n)
select ceil(5.67) from dual
返回地板值函数floor(n)
select floor(5.67) from dual
取模函数 mod
select mod(10 , 3) from dual ;
日期函数
获取当前日期函数
select sysdate from dual ;
select systimestamp from dual ;
获取给定日期范围内的月数函数
select ename , months_between(sysdate , hiredate) from emp ; //获取两个日期相差几个月
select ename , round(months_between(sysdate , hiredate)) from emp ;
在指定日期上加上指定月数函数
select add_months(sysdate , 4) from dual ; //当前日期加四个月的日期
返回指定日期后的星期对应的日期
select next_day(sysdate , '星期一') from dual ; //从当前算,找下一个星期一
求出给定日期的当月最后一天日期
select last_day(sysdate) from dual ;
转换函数
将指定表达式转换成字符串函数
select empno,ename,to_char(hiredate,'yyyy') as year,to_char(hiredate,'mm') as months ,
to_char(hiredate,'dd') as day from emp ;
// 可以用fm去掉月份前面的前导0
select empno,ename,to_char(hiredate, 'yyyy-mm-dd') from emp ;
select empno,ename,to_char(hiredate, 'fmyyyy-mm-dd') from emp ;
select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss') from dual;
select to_char(systimestamp,'yyyy-mm-dd:hh24:mi:ss:ff3') from dual;
// 给工资加千位分隔符
select empno,ename,to_char(sal, '99,999') from emp ;
// 给工资加货币符号,$是美元,L(Local) 代表本地货币
select empno,ename,to_char(sal, '$99,999') from emp ;
字符串转数字函数 to_number
select to_number('123')+to_number('123') from dual ;
字符串转日期函数 to_date
select to_date('2010-12-20','yyyy-mm-dd') from dual ;
通用函数
nvl函数
nvl(表达式1, 表达式2)
// 如果表达式1的值为null,则返回表达式2的值,否则返回表达式1的值
// 示例:计算职员年薪(月薪sal+奖金comm)*12,奖金可能为null
select empno,ename,(sal+nvl(comm,0))*12 income from emp;
decode函数
decode(关键字,键1,值1,键2,值2,……,值n)
//查询emp表,要求将所有英文职位转换为中文输出:clerk(业务员)、salesman(销售员)、
//manager(经理)、analyst(分析员)、president(总裁)。
select empno as 雇员编号,ename as 雇员姓名,
decode(job,'CLERK','业务员','SALESMAN','销售人员','MANAGER','经理','ANALYST',
'分析员','PRESIDENT','总裁','其它') as 职位 from emp ;
网友评论