Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate

Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!

oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数


oracle数字函数

在这里插入图片描述
round,四舍五入
trunc保留小数点位数
mod取模
在这里插入图片描述
默认0位小数点
负数的话就是整数的位置,

SQL> select round(11.01,1) from dual;

ROUND(11.01,1)
--------------
            11

SQL> select round(11.01,0) from dual;

ROUND(11.01,0)
--------------
            11

SQL> select round(11.01,2) from dual;

ROUND(11.01,2)
--------------
         11.01

SQL> select round(11.01,-1) from dual;

ROUND(11.01,-1)
---------------
             10
             
SQL> select round(11.01,-2) from dual;

ROUND(11.01,-2)
---------------
              0

-1的话,就是整数最后1位四舍五入

啥意思呢
你看看如果最后一个整数是5–9
自然就要进一位了

SQL> select round(16.01,-1) from dual;

ROUND(16.01,-1)
---------------
             20

咋样,整数也可以进位的

默认是不保留小数,和0位小数一样

SQL> select round(16.01) from dual;

ROUND(16.01)
------------
          16

在这里插入图片描述

SQL> select round(16.15, 1) from dual;

ROUND(16.15,1)
--------------
          16.2

SQL> select trunc(16.15, 1) from dual;

TRUNC(16.15,1)
--------------
          16.1

trunc是不做四舍五入的
在这里插入图片描述

SQL> select mod(16, 1) from dual;

 MOD(16,1)
----------
         0

SQL> select mod(16, 3) from dual;

 MOD(16,3)
----------
         1

除数取余数
常规骚操作

在这里插入图片描述
销售代表
(SA_REP)

SQL> select last_name,salary,mod(salary,5000) from employees where job_id='SA_REP';\

LAST_NAME                     SALARY MOD(SALARY,5000)
------------------------- ---------- ----------------
Tucker                      10000.00                0
Bernstein                    9500.00             4500
Hall                         9000.00             4000
Olsen                        8000.00             3000
Cambrault                    7500.00             2500
Tuvault                      7000.00             2000
King                        10000.00                0
Sully                        9500.00             4500
McEwen                       9000.00             4000
Smith                        8000.00             3000
Doran                        7500.00             2500
Sewall                       7000.00             2000
Vishney                     10500.00              500
Greene                       9500.00             4500
Marvins                      7200.00             2200
Lee                          6800.00             1800
Ande                         6400.00             1400
Banda                        6200.00             1200
Ozer                        11500.00             1500
Bloom                       10000.00                0

LAST_NAME                     SALARY MOD(SALARY,5000)
------------------------- ---------- ----------------
Fox                          9600.00             4600
Smith                        7400.00             2400
Bates                        7300.00             2300
Kumar                        6100.00             1100
Abel                        11000.00             1000
Hutton                       8800.00             3800
Taylor                       8600.00             3600
Livingston                   8400.00             3400
Grant                        7000.00             2000
Johnson                      6200.00             1200

30 rows selected

案例也很简单的

oracle日期处理

在这里插入图片描述

SQL> select sysdate from dual;

SYSDATE
-----------
2022/10/24

直接当列

在这里插入图片描述

SQL> select sysdate from dual;

SYSDATE
SYSDATE+1
-----------
2022/10/25

SQL> select sysdate-1 from dual;

SYSDATE-1
-----------
2022/10/23

日期相减得到的是间隔天数

SQL> select sysdate+1 - sysdate from dual;

SYSDATE+1-SYSDATE
-----------------
                1

用系统时间-员工入职时间

SQL> select sysdate-hire_date from employees;

SYSDATE-HIRE_DATE
-----------------
 7069.89009259259
 6242.89009259259
SQL> select round(sysdate-hire_date) from employees;

ROUND(SYSDATE-HIRE_DATE)
------------------------
                    7070
                    6243

在这里插入图片描述

SQL> select sysdate + 24/24 from dual;

SYSDATE+24/24
-------------
2022/10/25 21

SQL> select sysdate + 12/24 from dual;

SYSDATE+12/24
-------------
2022/10/25 9:

小时/24就是加小时,/24就是用来区别你加的是天,还是小时的

在这里插入图片描述

department_id

SQL> select last_name,(sysdate - hire_date)/7 from employees where department_id=90;

LAST_NAME                 (SYSDATE-HIRE_DATE)/7
------------------------- ---------------------
King                           1009.98481316138
Kochhar                        891.841956018519
De Haan                        1136.41338458995

1周7天
得到的就是周数

日期函数

在这里插入图片描述

操作的对象不同
在这里插入图片描述
今天到入职,多少个月了

SQL> select last_name,months_between(sysdate,hire_date) from employees;

LAST_NAME                 MONTHS_BETWEEN(SYSDATE,HIRE_DATE)
------------------------- ---------------------------------
King                                       232.254721102151
Kochhar                                    205.125688844086
De Haan                                    261.383753360215

200多个月

在这里插入图片描述

SQL> select add_months(sysdate,1) from dual;

ADD_MONTHS(SYSDATE,1)
---------------------
2022/11/24 21:32:36

SQL> select add_months(sysdate,-1) from dual;

ADD_MONTHS(SYSDATE,-1)
----------------------
2022/9/24 21:34:31

加一个月,就是11月

在这里插入图片描述
指定的天比如星期一–星期日

下个周一是哪天?

SQL> select next_day(sysdate,'星期一') from dual;

NEXT_DAY(SYSDATE,'星期一')
-----------------------
2022/10/31 21:36:39

数字1–7代表的是日一二三四五六

SQL> select next_day(sysdate,1) from dual;

NEXT_DAY(SYSDATE,1)
-------------------
2022/10/30 21:37:18

SQL> select next_day(sysdate,2) from dual;

NEXT_DAY(SYSDATE,2)
-------------------
2022/10/31 21:38:06

懂了吧

在这里插入图片描述

这个月的最后一天是哪天

SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDATE)
-----------------
2022/10/31 21:38:

这个月最后一天

在这里插入图片描述

SQL> select round(sysdate) from dual;

ROUND(SYSDATE)
--------------
2022/10/25

默认四舍五入天
你要写具体格式,它再给你四舍五入

一天过去了一半的话,就明天了

年月日
给年四舍五入

SQL> select round(sysdate,'yyyy') from dual;

ROUND(SYSDATE,'YYYY')
---------------------
2023/1/1

给月也是看月过半了没

SQL> select round(sysdate,'mm') from dual;

ROUND(SYSDATE,'MM')
-------------------
2022/11/1

天的话,就是d和dd

SQL> select round(sysdate,'d') from dual;

ROUND(SYSDATE,'D')
------------------
2022/10/23

SQL> select round(sysdate,'dd') from dual;

ROUND(SYSDATE,'DD')
-------------------
2022/10/25

在这里插入图片描述
截断到今天,而不是四舍五入

在这里插入图片描述

SQL> select employee_id,hire_date from employees where months_between(sysdate,hire_date)<=180;

EMPLOYEE_ID HIRE_DATE
----------- -----------
        113 2007/12/7
        124 2007/11/16
        128 2008/3/8
        135 2007/12/12
        136 2008/2/6
        149 2008/1/29
        155 2007/11/23
        164 2008/1/24
        165 2008/2/23
        166 2008/3/24
        167 2008/4/21
        173 2008/4/21
        179 2008/1/4
        183 2008/2/3
        191 2007/12/19
        199 2008/1/13

16 rows selected

受雇月数,小于等于180个月
被雇佣那个月

SQL> select employee_id,hire_date,months_between(sysdate,hire_date),add_months(hire_date,6),next_day(hire_date,6),last_day(hire_date) from employees where months_between(sysdate,hire_date)<=180;

EMPLOYEE_ID HIRE_DATE   MONTHS_BETWEEN(SYSDATE,HIRE_DATE) ADD_MONTHS(HIRE_DATE,6) NEXT_DAY(HIRE_DATE,6) LAST_DAY(HIRE_DATE)
----------- ----------- --------------------------------- ----------------------- --------------------- -------------------
        113 2007/12/7                    178.577728867981 2008/6/7                2007/12/14            2007/12/31
        124 2007/11/16                   179.287406287336 2008/5/16               2007/11/23            2007/11/30
        128 2008/3/8                     175.545470803465 2008/9/8                2008/3/14             2008/3/31
        135 2007/12/12                     178.4164385454 2008/6/12               2007/12/14            2007/12/31
        136 2008/2/6                     176.609986932497 2008/8/6                2008/2/8              2008/2/29
        149 2008/1/29                    176.868051448626 2008/7/29               2008/2/1              2008/1/31
        155 2007/11/23                   179.061599835723 2008/5/23               2007/11/30            2007/11/30
        164 2008/1/24                                 177 2008/7/24               2008/1/25             2008/1/31
        165 2008/2/23                    176.061599835723 2008/8/23               2008/2/29             2008/2/29
        166 2008/3/24                                 175 2008/9/24               2008/3/28             2008/3/31
        167 2008/4/21                    174.126115964755 2008/10/21              2008/4/25             2008/4/30
        173 2008/4/21                    174.126115964755 2008/10/21              2008/4/25             2008/4/30
        179 2008/1/4                     177.674503061529 2008/7/4                2008/1/11             2008/1/31
        183 2008/2/3                     176.706761126045 2008/8/3                2008/2/8              2008/2/29
        191 2007/12/19                   178.190632093787 2008/6/19               2007/12/21            2007/12/31
        199 2008/1/13                    177.384180480884 2008/7/13               2008/1/18             2008/1/31

16 rows selected

上面这个示例很复杂
但是基本语句都这样

在这里插入图片描述


SQL> select round(hire_date,'mm'),trunc(hire_date,'mm') from employees where hire_date like '%02';

ROUND(HIRE_DATE,'MM') TRUNC(HIRE_DATE,'MM')
--------------------- ---------------------
2002/9/1              2002/8/1
2002/9/1              2002/8/1
2002/12/1             2002/12/1
2002/6/1              2002/6/1
2002/6/1              2002/6/1
2002/6/1              2002/6/1
2002/6/1              2002/6/1

7 rows selected

round四舍五入
truncate不会四舍五入


总结

提示:重要经验:

1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值