oracle如何使用单行函数
这篇文章主要介绍了oracle如何使用单行函数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
单行函数
只对一行进行变换 每行返回一个结果
单行函数分字符、数值、日期、转换、通用
字符函数:大小写控制函数、字符控制函数
大小写控制函数:lower, upper, initcap
字符控制函数:concat,substr,length,instr,lpad|rpad,trim,replace
lower,upper,initcap
selectlower('SQL')fromdual;--结果sqlselectupper('sql')fromdual;--结果SQLselectinitcap('SQLCOurs')fromdual;--结果SqlCours首字母大写
concat,substr,length,instr,lapd|rpd,trim ,replace
selectconcat('hello','world')fromdual;//结果helloworldselectsubstr('HelloWorld',1,4)fromdual;//结果Hell从第一个字符开始取4个字符selectlength('hellowrld')fromdual;//结果9求字符长度*/selectinstr('Helloword','w')fromdual;//结果6第一次出现W的位置selectlpad(salary,10,'&')fromemployees;//结果&&&&&&2600左填充&selectrpad(salary,10,'&')fromemployees;//结果2600&&&&&&左填充&selecttrim('H'from'HHllWoHldHH')fromdual;//结果llWoHld去首尾不去中间
数字控制round,trunc,mod
selectround(45.36954,4)fromdual;//45.3695四舍五入selecttrunc(45.36954,3)fromdual;//45.369截断selectmod(1600,300)fromdual;//100求余数
日期控制 日期只可加减 months_betwwen,add_months,next_day,last_day
两个日期相减返回日期之间相差的天数
可以用数字除24来向日期中加上或减去天数
--查询公司中入职时间是每个月最后两天的员工selectlast_name,to_char(hire_date,'yyyy-mm-dd')hdatefromemployeeswherehire_date=last_day(hire_date)-1
--查询到2005年入职超过5年的员工selectlast_name,to_char(hire_date,'yyyy-mm-dd')fromemployeeswhereto_date('2005-12-31','yyyy-mm-dd')-hire_date>=5
下个月的今天(系统时间上加1个月)selectadd_months(sysdate,1)fromdual;
--两天后的日期selectnext_day(sysdate,2)fromdual;
转换 to_char,to_date,to_number
--隐式转换select'12'+3fromdual;//char自动转换为number加减selectsysdate+2fromdual;//number自动转换为date
--显式转换selectlast_name,to_char(hire_date,'yyyy-mm-dd')hire_datefromemployees;selectto_char(12345678.123,'999,999,999.99')fromdual;//12,345,678.12selectto_char(12345678.123,'000,000,999.99')fromdual;//012,345,678.12没有的们用0填充selectto_char(12345678.123,'L999,999,999.99')fromdual;//$12,345,678.12'L'为当地货币selectto_number('$12,345,678.12','L999,999,999.99')fromdual;//12345678.12selectto_number('12,345,678.12','999,999,999.99')fromdual;//12345678.12
通用函数 这些函数适用于任何数据类型,同时也适用于空值
nvl(expr1,edpr2),nvl2(expr1,expr2,expr3),nullif(expr1,expr2),coalesce(expr1……exprn)
nvl将空值转换成一个已知的值可用于日期、字符、数字
--求公司员工的年薪(含commission_pct)commisson_pct列中有空值selectlast_name,salary*12*(1+nvl(commission_pct,0))"nianxin"fromemployees;--输出last_name,department_id,当department_id为null时,显示‘没有部门’selectlast_name,nvl(to_char(department_id,'9999'),'没有部门')Depfromemployees;selectlast_name,nvl(to_char(department_id),'没有部门')Depfromemployees;//简写--NVL中的“没有部门”是char类型要把department_id显式转换成为NUMBER使()中的数据类型一至
nvl2 (expr1,expr2,expr3)当expr1不为null返回expr2 ,为null返回expr3
--查询员工的奖金率,若为空,返回0.01,若不为空,返回实际奖金率+0.015selectlast_name,commission_pct,nvl2(commission_pct,commission_pct+0.015,0.01)fromemployees;
nullif (expr1,expr2) 两个表达式相等返回NULL不相等返回表达式1expr1
selectfirst_name,length(first_name)"expr1",last_name,length(last_name)"expr2",nullif(length(first_name),length(last_name))resultfromemployees;
case表达式
CASEexprWHENcomparison_expr1THENreturn_expr1
[WHEN comparison_expr2 THEN return_expr2
WHENcomparison_exprnTHENreturn_exprn
ELSEelse_expr]
END
--查询部门号为10,20,30的员工信息,若部门号为--10则打印其工资的1.1倍,--20号部门,则打印其工资的1.2倍,--30号部门打印其工资的1.3倍数selectlast_name,department_id,casedepartment_idwhen10thensalary*1.1when20thensalary*1.2elsesalary*1.3endnew_salaryfromemployeeswheredepartment_idin(10,20,30)--上面的加显示其他的人的工资selectlast_name,department_id,casedepartment_idwhen10thensalary*1.1when20thensalary*1.2when30thensalary*1.3elsesalaryendnew_salaryfromemployees
decode
DECODE(col|expression, search2, result1 ,
[, search3, result2,...,]
[, default]) ------ 用小括号代替when ……then
--上面一样的题selectlast_name,department_id,decode(department_id,10,salary*1.1,20,salary*1.2,salary*1.3)new_salaryfromemployeeswheredepartment_idIn(10,20,30)--加显其他员工工资selectlast_name,department_id,decode(department_id,10,salary*1.1,20,salary*1.2,30,salary*1.3,salary)new_salaryfromemployees
感谢你能够认真阅读完这篇文章,希望小编分享的“oracle如何使用单行函数”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。