日期函数

第3章 日期函数

1. 计算 2000 年 1 月 1 日到现在有多少月,多少周(四舍五入)。

1
2
3
4
SELECT 
ROUND(MONTHS_BETWEEN(SYSDATE, TO_DATE('2000-1-1', 'yyyy-mm-dd'))) AS 月数,
ROUND((SYSDATE - TO_DATE('2000-1-1', 'yyyy-mm-dd')) / 7) AS 周数
FROM dual;

2. 将员工工资按如下格式显示:123,234.00 RMB。

1
SELECT TO_CHAR(123234.00, '999,999.00') || ' RMB' FROM dual;

3. 将员工的参加工作日期按如下格式显示:月份/年份。

1
SELECT TO_CHAR(hiredate, 'MM/YYYY') FROM emp;

4. 将当前系统时间格式化为 ‘YYYY-MM-DD HH24:MI:SS’ 输出。

1
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;

5. 查询 emp 表,将入职时间格式化为 ‘YYYY-MM-DD HH24:MI:SS’ 显示。

1
SELECT TO_CHAR(hiredate, 'YYYY-MM-DD HH24:MI:SS') FROM emp;

6. 将当前时间加一年后格式化输出显示。

1
SELECT ADD_MONTHS(SYSDATE, 12) FROM dual;

7. 将当前时间减 12 个月然后输出。

1
SELECT ADD_MONTHS(SYSDATE, -12) FROM dual;

8. 查询下一个星期一显示输出。

1
SELECT NEXT_DAY(SYSDATE, '星期一') FROM dual;

9. 查询当前月份的最后一天显示输出。

1
SELECT LAST_DAY(SYSDATE) FROM dual;

10. 查询 emp 表中人员入职的天数。

1
SELECT ROUND(SYSDATE - hiredate) AS 入职天数 FROM emp;

11. 查询 emp 表中入职时间满 10 年的员工。

1
SELECT * FROM emp WHERE MONTHS_BETWEEN(SYSDATE, hiredate) / 12 > 10;

12. 查询 emp 表中 2000 年后入职的员工。

1
SELECT * FROM emp WHERE TO_CHAR(hiredate, 'YYYY') > 2000;

13. 查询 emp 表中所有 98 年 3 月入职的员工。

1
SELECT * FROM emp WHERE EXTRACT(YEAR FROM hiredate) = 1981 AND EXTRACT(MONTH FROM hiredate) = 3;

14. 查询 emp 表中所有在 3 月入职的人。

1
SELECT * FROM emp WHERE EXTRACT(MONTH FROM hiredate) = 3;

15. 查询当前时间距离 ‘1998-8-2’ 的月数。

1
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('1998-8-2', 'yyyy-mm-dd')) FROM dual;

16. 将当前时间减 12 个月然后输出。

1
SELECT ADD_MONTHS(SYSDATE, -12) FROM dual;

17. 查询下一个星期一显示输出。

1
SELECT NEXT_DAY(SYSDATE, '星期一') FROM dual;

18. 查询一个月的最后一天显示输出。

1
SELECT LAST_DAY(SYSDATE) FROM dual;

19. 查询 emp 表中入职时间在下半个月的员工。

1
SELECT * FROM emp WHERE TO_CHAR(hiredate, 'DD') > 15;

20. 查询 emp 表中上半年入职的员工。

1
SELECT * FROM emp WHERE TO_CHAR(hiredate, 'MM') < 7;

21. 将数字 825398374.3762 格式化成字符串后输出。

1
SELECT TO_CHAR(825398374.3762) FROM dual;

22. 字符串变数字 ‘RMB825,398,374.38’。

1
SELECT 'RMB' || TO_CHAR(TO_NUMBER('825398374.38'), '999,999,999.00') FROM dual;

23. 查询 emp 表,将员工薪水以 ‘$999,999,999.00’ 格式显示。

1
SELECT TO_CHAR(sal, '$999,999,999.00') FROM emp;

24. 使用函数 NVL2 查询所有员工的基本工资(薪水 + 奖金)。

1
SELECT sal + NVL2(comm, comm, 0) AS 基本工资 FROM emp;

25. 使用函数 NVL 查询所有员工的基本工资(薪水 + 奖金)。

1
SELECT sal + NVL(comm, 0) AS 基本工资 FROM emp;

26. 查询 emp 表中入职时间在下半个月的员工。

1
SELECT * FROM emp WHERE TO_CHAR(hiredate, 'DD') > 15;

27. 查询 emp 表中上半年入职的员工。

1
SELECT * FROM emp WHERE TO_CHAR(hiredate, 'MM') < 7;

28. 查询部门 10 和 20 的员工截止到 2000 年 1 月 1 日,工作了多少个月,入职的月份。(提示:使用 MONTHS_BETWEEN

1
2
3
4
5
SELECT 
ROUND(MONTHS_BETWEEN(TO_DATE('2000-1-1', 'yyyy-mm-dd'), hiredate)) AS 工作月数,
TO_CHAR(hiredate, 'MM') AS 入职月份
FROM emp
WHERE deptno IN (10, 20);

29. 如果员工试用期 6 个月,查询职位不是 MANAGER 的员工姓名、入职日期、转正日期、入职日期后的第一个星期一、入职当月的最后一天日期。(提示:使用 ADD_MONTHSNEXT_DAYLAST_DAY

1
2
3
4
5
6
7
8
SELECT 
ename,
hiredate,
ADD_MONTHS(hiredate, 6) AS 转正日期,
NEXT_DAY(hiredate, '星期一') AS 第一个星期一,
LAST_DAY(hiredate) AS 当月最后一天
FROM emp
WHERE job != 'MANAGER';

30. 显示 enamehiredate 和雇员开始工作日是星期几(提示:使用 TO_CHAR 函数)。

1
SELECT ename, hiredate, TO_CHAR(hiredate, 'DY') AS 星期几 FROM emp;

31. 查询员工姓名、工资、格式化的工资(¥999,999.99)(提示:使用 TO_CHAR 函数)。

1
SELECT ename, sal, '¥' || TO_CHAR(sal, '999,999.00') AS 格式化工资 FROM emp;

32. 把字符串 ‘2015-3月-18 13:13:13’ 转换成日期格式,并计算和系统当前时间间隔多少天(提示:使用 TO_DATE 函数)。

1
2
3
4
SELECT 
TO_DATE('2015-3-18 13:13:13', 'yyyy-mm-dd hh24:mi:ss') AS 转换日期,
ROUND(SYSDATE - TO_DATE('2015-3-18 13:13:13', 'yyyy-mm-dd hh24:mi:ss')) AS 间隔天数
FROM dual;

日期函数
https://blog.pangcy.cn/2018/10/03/数据库相关/Oracle/SQL 练习/日期函数/
作者
子洋
发布于
2018年10月3日
许可协议