//计算二月底 SELECTLAST_DAY (ADD_MONTHS (TRUNC (hire_date, 'y'), 1)) AS 二月底 FROM dmhr.employee WHEREROWNUM <= 1;
//计算二月底对应的日期 SELECT TO_CHAR (LAST_DAY (ADD_MONTHS (TRUNC (hire_date, 'y'), 1)), 'DD') AS 日 FROM dmhr.employee WHEREROWNUM <= 1;
输出结果:
周的计算
使用 TO_CHAR、 NEXT_DAY、TRUNC 函数共同实现周的计算。示例语句如下所示:
WITH x AS (SELECT TRUNC (SYSDATE, 'yy') + (LEVEL - 1) AS 日期 FROM DUAL CONNECTBYLEVEL <= 8) SELECT 日期, TO_CHAR (日期, 'd') AS d, TO_CHAR (日期, 'day') ASday, NEXT_DAY (日期, 1) AS 下个周日, TO_CHAR (日期, 'ww') AS ww, TO_CHAR (日期, 'iw') AS iw FROM x;
WITH x AS (SELECT TRUNC (SYSDATE, 'yy') + (LEVEL - 1) dy FROM DUAL CONNECTBYLEVEL <= ADD_MONTHS (TRUNC (SYSDATE, 'y'), 12) - TRUNC (SYSDATE, 'y')) SELECT dy, TO_CHAR (dy, 'day') AS 周五 FROM x WHERE TO_CHAR (dy, 'd') = 6;
WITH x AS (SELECT 开始年份 + (LEVEL - 1) AS 年份 FROM (SELECTEXTRACT (YEARFROMMIN (hire_date)) AS 开始年份, EXTRACT (YEARFROMMAX (hire_date)) AS 结束年份 FROM dmhr.employee) CONNECTBYLEVEL <= 结束年份 - 开始年份 + 1) SELECT * FROM x;
输出结果:
关联查询得到结果集
示例语句如下所示:
WITH x AS (SELECT 开始年份 + (LEVEL - 1) AS 年份 FROM (SELECTEXTRACT (YEARFROMMIN (hire_date)) AS 开始年份, EXTRACT (YEARFROMMAX (hire_date)) AS 结束年份 FROM dmhr.employee) CONNECTBYLEVEL <= 结束年份 - 开始年份 + 1) SELECT x.年份, COUNT (e.employee_id) 入职人数 FROM x LEFTJOIN dmhr.employee e ON (EXTRACT (YEARFROM e.hire_date) = x.年份) GROUPBY x.年份 ORDERBY1;
SELECT employee_name 姓名, hire_date 入职日期, TO_CHAR (hire_date, 'day') AS 星期 FROM dmhr.employee WHERE TO_CHAR (hire_date, 'mm') IN ('01', '12') AND TO_CHAR (hire_date, 'd') != '4';
输出结果:
使用日期的特殊部分比较记录
使用 to_char 函数统计相同月份与周内日期入职的员工。示例语句如下所示:
SELECT employee_name 姓名, hire_date 入职日期, TO_CHAR (hire_date, 'MON day') AS 月周 FROM (SELECT employee_name, hire_date, COUNT (*) OVER (PARTITIONBY TO_CHAR (hire_date, 'MON day')) AS ct FROM dmhr.employee) WHERE hire_date LIKE'2015%';