1.Oracle中的日期处理(一个类型两个函数)
日期的数据类型DATE,该类型可以包含日期时间
2.系统当前日期的获取方式
SELECT SYSDATE FROM DUAL; --日期时间
3.日期与字符串的转换问题
(1)日期转换成字符串 TO_CHAR
SELECT SYSDATE 标准显示,
TO_CHAR(SYSDATE,'YYYY-MM-DD') 日期,
TO_CHAR(SYSDATE,'YYYY') 四位日期,
TO_CHAR(SYSDATE,'YY') 两位日期,
TO_CHAR(SYSDATE,'MM') 月,
TO_CHAR(SYSDATE,'DD') 月第几天,
TO_CHAR(SYSDATE,'DDD') 年第几天,
TO_CHAR(SYSDATE,'D') 周第几天,
TO_CHAR(SYSDATE,'HH') 小时12,--12小时进位制
TO_CHAR(SYSDATE,'HH24') 小时24,--24小时进位制
TO_CHAR(SYSDATE,'MI') 分,
TO_CHAR(SYSDATE,'SS') 秒,
TO_CHAR(SYSDATE,'HH24:MI:SS') 时分秒,
TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') 时间戳
FROM DUAL;
(2)字符串转换成日期 TO_DATE
SELECT TO_DATE('2018-05-06','YYYY-MM-DD')+2
FROM DUAL; --字符串转换日期
SELECT TO_DATE('2018-05-06 18:23:56','YYYY-MM-DD HH24:MI:SS')
FROM DUAL; --字符串转换时间戳
(3)应用场景
TO_CHAR一般应用于SELECT语句,用以将日期按照固定的格式查询出来,显示到页面上
TO_DATE应用场景有:
①在更新语句中(INSERT UPDATE)将指定字符串转换成日期录入数据库
②在查询语句中WHERE里面,将指定的字符串转换成日期进行比较
(4)日期在数据库中的存储问题:
所有数据库的日期类型,在数据库中都是以常整数存储的一个,从标注日期(1970-01-01 00:00:00)到当前指定日期之间的毫秒差。
基于上述,日期比较实际上就是常整数之间的加减法,比较速度会快于字符串比较。
4.日期的计算
(1)天数加减:
直接操作,日期是基于天数操作的
(2)月份加减:
Oracle中对于日期的加减是通过一个函数ADD_MONTHS(日期,数值)完成的
该函数会在当前日期的基础上,增加或减少指定月数
--系统时间的次月同日
SELECT ADD_MONTHS(SYSDATE,1) 下月同日,
ADD_MONTHS(SYSDATE,-1) 上月同日
FROM DUAL;
--指定日期的次月同日
SELECT ADD_MONTHS(TO_DATE('2015-06-05','YYYY-MM-DD'),1)
FROM DUAL;
--指定日期不存在次月同日,以次月最后一日为同日
SELECT ADD_MONTHS(TO_DATE('2015-08-31','YYYY-MM-DD'),1)
FROM DUAL;
(3)时分秒操作
--加三个小时
SELECT SYSDATE,SYSDATE+3/24
FROM DUAL;
--加10分钟
SELECT SYSDATE,SYSDATE+10/60/24
FROM DUAL;
--加30秒
SELECT SYSDATE,SYSDATE+30/60/60/24
FROM DUAL;
5.日期修改操作
--将PERSON表中的PDATE修改为系统当前时间
UPDATE PERSON A
SET A.PDATE=SYSDATE
WHERE A.PID=3;
--将孙二娘的生日修改为1999-01-01
UPDATE PERSON A
SET A.PDATE=TO_DATE('1999-01-01','YYYY-MM-DD')
WHERE A.PNAME='孙二娘';
--录入系统当前日期
INSERT INTO PERSON(PID,PNAME,PNUMBER,PSEX,PSTATE,PMONEY,PDATE)
VALUES(18,'你真好','1000','1','1','11111',SYSDATE);
--录入指定日期
INSERT INTO PERSON(PID,PNAME,PNUMBER,PSEX,PSTATE,PMONEY,PDATE)
VALUES(19,'当然了','1000','1','1','11111',TO_DATE('1958-01-02','YYYY-MM-DD'));