首页 > 解决方案 > 编写一个 PL/SQL 块来确定服务时间最长的员工在一周中的哪个时间段(工作日或周末)开始工作

问题描述

编写一个 PL/SQL 块来确定服务时间最长的员工在一周中的哪个时间段(工作日或周末)开始工作

标签: oracleplsql

解决方案


如果我不得不猜测,我会说这是工作日,因为绝大多数员工不会在周末上班。我不认为我认识一个人的第一个工作日是周六或周日。

无论如何:根据 Scott 的EMP表格,数据如下所示(日期格式为dd.mm.yyyy):

SQL> select ename, hiredate from emp order by hiredate;

ENAME      HIREDATE
---------- ----------
SMITH      17.12.1980      --> that's the one who was the first employee
ALLEN      20.02.1981
WARD       22.02.1981
JONES      02.04.1981
BLAKE      01.05.1981
CLARK      09.06.1981
TURNER     08.09.1981
MARTIN     28.09.1981
KING       17.11.1981
JAMES      03.12.1981
FORD       03.12.1981
MILLER     23.01.1982
SCOTT      09.12.1982
ADAMS      12.01.1983

14 rows selected.

longestCTE 找到最小值并使用英语将其hiredate“转换”为日期名称(以便我以后可以使用它)。最后的查询只是检查那一天是什么并显示结果。

SQL> with longest as
  2    (select min(hiredate) min_hiredate,
  3            to_char(min(hiredate), 'dy', 'nls_date_language=english') day
  4     from emp
  5    )
  6  select min_hiredate,
  7         day,
  8         case when day in ('sat', 'sun') then 'weekend'
  9              else 'weekday'
 10         end result
 11  from longest;

MIN_HIREDA DAY          RESULT
---------- ------------ ----------
17.12.1980 wed          weekday

SQL>

这是 - 显然 - SQL。现在您知道了如何将其转录为 PL/SQL。


推荐阅读