SYSDATE 在 Oracle sqldeveloper 中查找项目的平均工作日数

Posted

技术标签:

【中文标题】SYSDATE 在 Oracle sqldeveloper 中查找项目的平均工作日数【英文标题】:SYSDATE to find average amount of workdays on a project in Oracle sqldeveloper 【发布时间】:2015-03-31 05:09:00 【问题描述】:

我在 ETSU 学习数据库基础。我们的讲师来自孟加拉国,因此有时很难听懂他的讲课。那么 SYSDATE 的使用就是那些日子之一。然后在我们实验室有这个问题,

显示按 job_id 分组的员工的平均工作时间(天数)。假设没有人辞职或被解雇。使用 Oracle 日期函数 SYSDATE。

经过数小时的谷歌和堆栈溢出搜索,以及教授未回答的问题,它仍然难倒我。

我尝试了几个(SELECT、FROM、GROUP_BY、HAVING 和 ORDER_BY),终于来到这里寻求帮助。

这是我的脚本:

     SELECT job_id, hire_date
     FROM hr.employees
     GROUP BY job_id
     HAVING AVG(SYSDATE) - hire_date;

这是我的错误: 从行开始的错误:命令中的 1 - 选择 job_id,hire_date FROM hr.employees 按作业 ID 分组 HAVING AVG(SYSDATE) - 雇用日期; 命令行错误:4 列:31 错误报告 - SQL 错误:ORA-00920:无效的关系运算符 00920. 00000 - “无效的关系运算符”

我做错了什么?

【问题讨论】:

AVG(SYSDATE) - hire_date 不是布尔条件 - 这就是错误消息告诉您的内容。另外:您无法计算单个日期的平均值(如果定义了这样的操作,它只会产生 sysdate) 啊,看到这有助于我更多地了解 SYSDATE 的用途。现在,当我被问到一个测试或有另一个实验室要求它时,我将更有能力回答并正确回答。我很高兴我问了。 【参考方案1】:

显示按 job_id 分组的员工的平均工作时间(天数)。假设没有人辞职或被解雇。使用 Oracle 日期函数 SYSDATE。

因此,假设没有员工在受雇后被解雇,让我们看下面的示例,该示例可以找到每个部门员工的平均工作时间。此外,这假设一周中的所有日子(包括周末)。

SQL> SELECT deptno,
  2    ROUND(AVG(SYSDATE - hiredate), 2) avg_duration
  3  FROM emp
  4  GROUP BY deptno
  5  /

    DEPTNO AVG_DURATION
---------- ------------
        30     12327.79
        20     12135.45
        10     12218.79

SQL>

如果您不想包括周末,则需要过滤掉那些属于周末或节假日的日期。

提示,where to_char(that_date, 'Dy') not in ('Sat', 'Sun')

但是,我觉得这个问题太简单了,没必要搞得这么复杂。所以,上面的解决方案就足够了。

【讨论】:

好吧,我想我明白了。我用过 AVG,甚至用过 ROUND。它在实验室里不起作用。让我试试看会发生什么。编辑:它奏效了!非常感谢你。我从早上 10 点开始就一直在做这件事。现在把它上交,看看是不是他想要的。

以上是关于SYSDATE 在 Oracle sqldeveloper 中查找项目的平均工作日数的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库的sysdate类型怎么转换为字符串

在 Oracle 中插入后触发插入 sysdate

Oracle 日期数据类型与 sysdate

Oracle trunc函数使用

oracle之trunc(sysdate)

ORACLE时间函数(SYSDATE)深入理解