数据库基础——第二天(下)

本节主要介绍调用时间的操作函数、日期操作函数以及空值操作函数。

  • —————— 时间 相关操作 —————-

-- 关键字:
-- SYSDATE:对应数据库的一个内置函数,返回一个DATE类型数值,该值表示当前系统时间;
-- SYSTIMESTAMP:返回当前系统时间的时间戳类型的值;

SELECT SYSTIMESTAMP FROM dual;

数据库基础——第二天(下)_第1张图片

-- 日期转换函数

-- TO_DATE(日期字符串,指定格式)可以将一个字符串按照给定的日期格式解析为一个DATE类型的值
SELECT TO_DATE('2013-11-23 23:11:11','YYYY-MM-DD HH24:MI:SS') FROM dual;
-- 在单引号内的日期格式字符串中除了数字、英文字母和简单符号,其他字符都应该用双引号括起来
SELECT 
  TO_DATE('2013112323:11:11','YYYY"年"MM"月"DD"日" HH24:MI:SS') 
FROM dual;

-- TO_CHAR(日期,指定输出格式):将日期按照指定的格式转换为字符串
SELECT
  TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH12"时"MI"分"SS"秒"')
FROM dual;
-- 日期类型可以比大小,越晚的越大
-- 日期类型之间可以做减法,差为相差的天数,
-- 日期类型可以加减数字,等同于加减天数

SELECT ename,FLOOR((SYSDATE-hiredate)/365) || '年' AS hiredates FROM emp;

SELECT TO_CHAR(TO_DATE('99-11-23','RR-MM-DD'),'YYYY-MM-DD') FROM dual;
  • —————- 日期常用函数 —————-

-- LAST_DAY(date):查看给定日期所在月的月底
SELECT LAST_DAY(SYSDATE) FROM dual;
-- ADD_MONTHS(date,i)
-- 对给定日期加上指定的月数,如果是负数则是减
SELECT 
  TO_CHAR(
    ADD_MONTHS(TO_DATE('1992-11-17','YYYY-MM-DD'),12*20) ,
    'YYYY-MM-DD'
  )
FROM dual;
-- MONTHS_BETWEEN(date1,date2)
-- 计算两个月之间相差的月份,计算是用date1减去date2换算得到的;
SELECT ename,FLOOR(MONTHS_BETWEEN(SYSDATE,hiredate)) FROM emp;
-- NEXT_DAY(date,weekChar)/NEXT_DAY(date,weekNum)
-- 返回给定日期第二天开始一周内的周几的日期,1-7<=>周日-周六;
SELECT NEXT_DAY(SYSDATE,1) FROM dual;
-- LEAST,GREATEST(date1,date2)
-- 比较两个值(不仅是日期)的最小/最大值
SELECT LEAST(SYSDATE, TO_DATE('2008-10-10','YYYY-MM-DD')) FROM dual;
-- EXTRACT函数
-- 提取指定日期中指定时间分量的值,DATE可以提取年月日,时间戳还可以提取时分秒
SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual;
SELECT ename,hiredate FROM emp WHERE EXTRACT(YEAR FROM hiredate)>=1982;
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-13 23:22:11') FROM dual;
SELECT EXTRACT(DAY FROM DATE '2001-02-13') FROM dual;
  • —————- NULL操作 —————-

-- NULL与字符串连接,等于什么都没做
-- NULL与数字计算,结果还是NULL
CREATE TABLE student(id NUMBER(4),name CHAR(20),gender CHAR(1));
INSERT INTO student VALUES(1000,'李莫愁','F');
INSERT INTO student VALUES(1001,'林平之',NULL);
INSERT INTO student(id,name) VALUES(1002,'张无忌');
COMMIT;
-- 在判断某个字段的值是否为NULL,要使用IS NULL和IS NOT NULL判断,
-- 不能使用等号‘=’判断
UPDATE student SET gender = 'M' WHERE gender IS NULL;
ROLLBACK;
SELECT * FROM student;
-- 空值函数
-- NVL(a1,a2)
-- 若a1为NULL则函数返回a2,否则返回a1自身
-- 所以该函数是将NULL值替换为非NULLSELECT ename,comm,sal+NVL(comm,0) FROM emp;
-- 若该员工有奖金,则显示为"有奖金"
-- 若该员工奖金为NULL,则显示"没有奖金"
-- NVL2(a1,b,c):如股a1 IS NOT NULL,则显示b,否则显示c
SELECT ename, NVL2(comm,'有奖金','没有奖金')
FROM emp
SELECT ename,sal,comm,NVL2(comm,sal+comm,sal) FROM emp;

你可能感兴趣的:(数据库,oracle,日期函数,空值函数,SQL)