oracle如何使用单行函数
admin
2023-04-25 20:03:16
0

单行函数

只对一行进行变换  每行返回一个结果

单行函数分 字符、数值、日期、转换、通用

字符函数:大小写控制函数、字符控制函数

          大小写控制函数:lower, upper, initcap

          字符控制函数:concat,substr,length,instr,lpad|rpad,trim,replace

lower,upper,initcap      

select lower('SQL') from dual;
--结果 sql
select upper('sql') from dual;
--结果 SQL
select initcap('SQL COurs') from dual;
--结果 Sql Cours 首字母大写

concat,substr,length,instr,lapd|rpd,trim ,replace

select concat('hello','world') from dual; //结果 helloworld 
select substr('HelloWorld',1,4) from dual; //结果 Hell  从第一个字符开始取4个字符 
select length('hellowrld') from dual; //结果 9 求字符长度*/
select instr('Helloword','w') from dual; //结果 6 第一次出现W的位置
select lpad(salary ,10,'&') from employees ; //结果 &&&&&&2600 左填充& 
select rpad(salary ,10,'&') from employees ; //结果 2600&&&&&& 左填充& 
select trim('H' from 'HHllWoHldHH')from dual; //结果 llWoHld 去首尾不去中间

数字控制 round,trunc,mod

select round(45.36954,4) from dual; //  45.3695四舍五入
select trunc(45.36954,3) from dual; //  45.369 截断
select mod(1600,300) from dual;     //   100 求余数

日期控制  日期只可加减  months_betwwen,add_months,next_day,last_day

两个日期相减返回日期之间相差的天数

可以用数字除24来向日期中加上或减去天数

--查询公司中入职时间是每个月最后两天的员工
select last_name,to_char(hire_date,'yyyy-mm-dd') hdate 
from employees 
where hire_date=last_day(hire_date)-1
--查询到2005年入职超过5年的员工
select last_name,to_char(hire_date,'yyyy-mm-dd') from employees
where to_date('2005-12-31','yyyy-mm-dd')-hire_date >=5
下个月的今天(系统时间上加1个月)
select add_months(sysdate,1) from dual;
--两天后的日期
select next_day(sysdate,2) from dual;

转换  to_char,to_date,to_number

--隐式转换
select '12'+3 from dual;   //char自动转换为number 加减
select sysdate +2 from dual; //number 自动转换为date
--显式转换
select last_name, to_char(hire_date,'yyyy-mm-dd') hire_date from employees;
select to_char(12345678.123,'999,999,999.99') from dual; // 12,345,678.12
select to_char(12345678.123,'000,000,999.99') from dual; // 012,345,678.12 没有的们用0填充
select to_char(12345678.123,'L999,999,999.99') from dual; // $12,345,678.12 'L'为当地货币 
select to_number('$12,345,678.12','L999,999,999.99') from dual; // 12345678.12
select to_number('12,345,678.12','999,999,999.99') from dual;  // 12345678.12

通用函数   这些函数适用于任何数据类型,同时也适用于空值

nvl(expr1,edpr2),nvl2(expr1,expr2,expr3),nullif(expr1,expr2),coalesce(expr1……exprn)

nvl 将空值转换成一个已知的值 可用于日期、字符、数字

--求公司员工的年薪(含commission_pct)commisson_pct列中有空值
select last_name,salary*12*(1+nvl(commission_pct,0)) "nianxin" from employees;

--输出last_name,department_id,当department_id为null时,显示‘没有部门’
select last_name, nvl(to_char(department_id,'9999'),'没有部门') Dep from employees;
select last_name, nvl(to_char(department_id),'没有部门') Dep from employees; //简写
--NVL中的“没有部门” 是char类型 要把department_id显式转换成为NUMBER 使()中的数据类型一至

nvl2 (expr1,expr2,expr3) 当expr1不为null 返回expr2 ,为null返回expr3

--查询员工的奖金率,若为空,返回0.01,若不为空,返回实际奖金率+0.015
select last_name,commission_pct ,nvl2(commission_pct,commission_pct + 0.015 ,0.01) 
from employees;

nullif (expr1,expr2)  两个表达式相等返回NULL 不相等返回表达式1 expr1

select first_name,length(first_name) "expr1",
        last_name,length(last_name) "expr2",
        nullif(length(first_name),length(last_name)) result
from employees;

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 倍数
select last_name,department_id,case department_id when 10 then salary * 1.1
                                                  when 20 then salary * 1.2
                                                  else salary * 1.3 end  new_salary
from employees
where department_id in (10,20,30) 

--上面的加显示其他的人的工资
select last_name,department_id,case department_id when 10 then salary * 1.1
                                                  when 20 then salary * 1.2
                                                  when 30 then salary * 1.3
                                                  else salary  end  new_salary
from employees

decode 

DECODE(col|expression, search2, result1 ,

           [, search3, result2,...,]

           [, default])                                                      ------ 用小括号代替 when  ……then

--上面一样的题
select last_name,department_id,decode(department_id,10,salary * 1.1,
                                                    20,salary * 1.2,
                                                       salary * 1.3) new_salary
from employees
where department_id In (10,20,30)
--加显其他员工工资
select last_name,department_id,decode(department_id,10,salary * 1.1,
                                                    20,salary * 1.2,
                                                    30,salary * 1.3,
                                                    salary) new_salary
from employees


相关内容

热门资讯

烈焰熊熊,堪比“原子弹”,欧洲... 据美国有线电视新闻网(CNN)7月29日报道,席卷法国西南部的大片野火燃烧得如此猛烈,以至于形成了一...
外交部:对日本熊本县地震遇难者... 据凤凰卫视报道,针对日本熊本县发生强震造成人员伤亡,中国外交部发言人毛宁7月29日在例行记者会上表示...
高铁喧哗被劝阻后叫嚣全家体制内... “女子高铁喧哗被劝阻后叫嚣全家体制内”一事迎来官方通报。据新京报报道,7月29日,辽宁北票市公安局发...
广东专业蓝牙耳机定制厂家推荐,... 在珠三角腹地,广东早已成为全球蓝牙耳机产业链的“心脏地带”。从深圳华强北的声学元件批发,到东莞、惠州...
格雷厄姆葬礼变地缘竞价场!两大... 有些葬礼,送别的是逝者;有些葬礼,演的却是活人最现实的政治博弈。当地时间7月28日,美国老牌鹰派参议...
一道小学数学题难住3名医学博士... 3名不同学校的博士同做一道数学题,谁最厉害?近日,一陕西网友发布的视频引发热议。29日,视频发布者“...
华为全新“小艺任务”亮相:整合... 7月29日,在华为鸿蒙电脑新品技术沟通会上,终端云服务小艺业务部总裁贾永利宣布,小艺将迎来“从对话到...
广西日报特稿《王的猜想》火了,... 澎湃新闻记者 蒋子文 实习生 汤煜炜为应对外界购买纸质版特稿《王的猜想》的热情,《广西日报》宣布紧急...
月租20元内!2026年平价云... 不少手游玩家、账号运营从业者挑选云手机时,首要诉求就是低价够用,想要控制每月支出在20元以内,同时兼...
诺奖得主如何看待王虹境遇?“我... 中村修二(2014年诺贝尔物理学奖得主)【导读】近日王虹与邓煜双双获得2026年菲尔兹奖,成为了首批...