Oracle数据库学习笔记——单行函数

本文详细介绍了SQL中的各类常用函数,包括字符函数、数值函数、日期函数等,并通过具体实例展示了如何运用这些函数进行数据处理和查询优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单行函数(五类):字符,数值,日期,转换,通用。

 

一、字符函数:大小写控制,字符控制。

1、大小写控制:

lower   将字符转换成小写;

upper  将字符转换成大写;

initcap 将字符串中每个单词(空白分割)的第一个字母转换成大写,单词其他的转换成小写;

select lower('LUOjun'),upper('luoJun'),initcap('LuoJUn java')
from dual


select lower('LUOjun'),upper('luoJun'),initcap('LuoJUn java'

from dual

 

------应用

select *

from employees

where upper(last_name)='KING' ---不清楚king的大小写,则统一转换

 

 

2、字符控制

concat    链接两个字符串;

substr   截取字符串的子集,第一个参数表示位置(第一个字符为的位置为1),     第二个参数表示个数;

length    返回字符串的长度;

instr   返回某个字符在字符串中的位置,如果没有则返回0

trim   去掉字符串中首尾的出现的指定字符,首尾出现的连续字符都要出掉;

lpad/rpad  将字符串左补齐/右补齐;

replace   将字符串中指定的某个字符替换成其他字符,全部替换;

select concat('hello','world'),substr('study_java',2,6),length('123456'

from dual

 

 

select instr('hellojava','l'),instr('hellojava','w'

from dual

 

 

select last_name,lpad(salary,10,'*'),rpad(salary,10,'#')

from employees

 

 

select trim('h' from 'hhellowohhrldh'),replace('abcdab','b','m')

from dual

 

 

 

 

数字函数:round(四舍五入)、trunc(截断)、mod(求余)

select round(5452.926,2),round(5452.926,0),round(5452.926,-1)

from dual

 

 

select trunc(5452.926,2),trunc(5452.926,0),trunc(5452.926,-1),mod(12,10)

from dual

 

 

 

 

日期函数:

 

在日期上加上或减去一个数字结果还是日期。

两个日期相减返回日期之间相差的天数,两个日期之间不能做加法运算。

select sysdate,sysdate+1,sysdate-3 

from dual

 

 

select last_name,sysdate-hire_date as "工作天数",trunc(sysdate-hire_date) as "截断"

from employees

 

 

select last_name,(sysdate-hire_date)/30 as "大概天数",months_between(sysdatehire_date) as "精确天数"

from employees

 

 

select add_months(sysdate,2),add_months(sysdate,-3),next_day(sysdate,'星期日')

from dual

--结果,next_day表示下个星期几的日期(今天是星期3

ADD_MONTHS(SYSDATE,2) ADD_MONTHS(SYSDATE,-3) NEXT_DAY(SYSDATE,'星期日')

--------------------- ---------------------- ------------------------

2015/3/21 14:45:42    2014/10/21 14:45:42    2015/1/25 14:45:42

 

--来公司的员工中,hire_date是每个月倒数第二天来公司的有哪些?

select last_name,hire_date

from employees

where hire_date=last_day(hire_date)-1

 

select sysdate,round(sysdate,'MONTH'),round(sysdate,'MM'),trunc(sysdate,'HH')

from dual

--结果(按照月份四舍五入的话,日期过半则月份加1;所以121号做round运算,其结果为21号;按小时截断trunc的话其时钟和分钟都为0

SYSDATE ROUND(SYSDATE,'MONTH') ROUND(SYSDATE,'MM') TRUNC(SYSDATE,'HH')

----------- ---------------------- ------------------- -----------

2015/1/21 1 2015/2/1               2015/2/1            2015/1/21 14:00:00

 

 

 

 

 

 

 

 

 

 

 

select '12'+2,sysdate+2 from dual

 

 

 

 

 

---选出199467号来公司的员工,打印出其id,不同的转换方式效果一样

select employee_id,hire_date

from employees

--where hire_date='7-6-94' ---date型的格式要求很怪异,一般不用这种

--where to_date('1994-06-07','yyyy-mm-dd')=hire_date  ---char转换成date

where to_char(hire_date,'yyyy-mm-dd')='1994-06-07'  ---date转换成char

 

 

---中间要穿插其它符号的时候要用双引号包起来

select employee_id,to_char(hire_date,'yyyy""mm""dd""')

from employees

where to_char(hire_date,'yyyy""mm""dd""')='19940607'

 

---99来替换该有的位,一个9就表示一个位。用0的话,它就会用0补齐不够的位

select to_char(123456.78,'999,999,999.999') ,to_char(123456.78,'999,999,999.9'

from dual

 

 

select to_char(12.34,'999.99') ,to_char(12.34,'000.0')

from dual

 

 

---$表示美元,用L来获取本地货币符号

select to_char(12.34,'$999.99') ,to_char(12.34,'L000.0')

from dual

 

 

 

 

 

 

 

 

 

 

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

•NVL (expr1, expr2) 如果exper1的值为的时候,则用后面的exper2来代替;不为空的时 候就是它本身不变。

 

•NVL2 (expr1, expr2, expr3) 当exper1不为NULL的时候,返回exper2;为NULL的时候 返回exper3NVL (expr1, expr2) 等价于NVL2 (expr1, expr1,  expr3)

 

•NULLIF (expr1, expr2) 相等返回NULL;不相等返回exper1

 

•COALESCE (expr1, expr2, ..., exprn) 如果exper1为空,返回exper2;如果exper2为空,返 回exper3... 类推 

---计算公司员工的年薪,需要加上奖金率,因为标准没有奖金的人其commission_pct这一项为空,为了便于计算需要将空的地方用0来替换

select employee_id,last_name,salary*12*(1+nvl(commission_pct,0)) as "年薪"

from employees

 

 

 

输出last_name,department_id,当department_idnull时,显示‘没有部门’。

---department_id本身是数字类型的,没有部门是字符类型的,而且是汉字,从而要使用显示转换

select last_name,nvl(to_char(department_id),'没有部门')

from employees

 

 

 

 

 

 

 

 

 

 

CASE expr WHEN comparison_expr1 THEN return_expr1

         [WHEN comparison_expr2 THEN return_expr2

          WHEN comparison_exprn THEN return_exprn

          ELSE else_expr]

END

 

--查询部门号为 10, 20, 30 的员工信息

--若部门号为 10, 则打印其工资的 1.1 

--20 号部门则打印其工资的 1.2 

--30 号部门打印其工资的 1.3 倍数

select last_name,department_id,salary,case department_id 

                                           when 10 then salary*1.1

                                           when 20 then salary*1.2

                                           else salary*1.3 

                                       end as "new_sal"

from employees

where department_id in (10,20,30)

 

 

--查询部门号为 10, 20, 30 的员工信息

--若部门号为 10, 则打印其工资的 1.1 

--20 号部门则打印其工资的 1.2 

--30 号部门打印其工资的 1.3 倍数----和以上的代码效果等价

select last_name,department_id,salary,decode(department_id,10, salary*1.1,

                                                           20, salary*1.2,

                                                          salary*1.3as "new_sal"

from employees

where department_id in (10,20,30)

 

多表查询

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值