oracle如何使用单行函数

66次阅读
没有评论

共计 4081 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章主要介绍了 oracle 如何使用单行函数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

单行函数

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

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

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

          大小写控制函数: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

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“oracle 如何使用单行函数”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计4081字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)