【问题标题】:Oracle SQL Retrieve Data From End of Month - 16th And 15th - 1stOracle SQL 从月底检索数据 - 16 日和 15 日 - 1 日
【发布时间】:2015-12-01 18:43:08
【问题描述】:

好的,所以我正在尝试检索我们将称为 DATE_OF_ENTRY 的字段的数据,该字段是这样的。

DATE_OF_ENTRY 数据示例

28-NOV-15

所以我需要在每月运行两次的脚本中使用此字段来提取某些记录。基本上,当它是当月的第 16 天时,我希望从 1 日到 15 日的所有记录都被拉起。当我在下个月的 1 日运行这个脚本时,我想要上个月 16 月底的所有记录。

我现在用什么

WHERE ROUND(DATE_OF_ENTRY,'MM') = ROUND(sysdate-1,'MM') AND DATE_OF_ENTRY < trunc(sysdate)

这个语句的问题是它在 1 号工作到 16 号到上个月月底,但是在 16 号它仍然获取上个月的数据。

感谢任何帮助!

【问题讨论】:

    标签: sql oracle system-databases


    【解决方案1】:

    使用带有MONTH 参数的TRUNC() 函数将获得该月的第一天。

    TRUNC() 函数与DATE_OF_ENTRY 一起使用将删除TIME 部分。

    使用+ 运算符为DATE 添加天数

     SELECT TRUNC(sysdate, 'MONTH') firstDay,
            TRUNC(sysdate, 'MONTH') + 15 Day15,
            *
     FROM yourTable
     WHERE TRUNC(DATE_OF_ENTRY) >= TRUNC(sysdate, 'MONTH')
       AND TRUNC(DATE_OF_ENTRY) <= TRUNC(sysdate, 'MONTH') + 15
    

    【讨论】:

    • 虽然这段代码可以回答这个问题,但最好在不介绍其他代码的情况下解释它是如何解决问题的,以及为什么要使用它。从长远来看,纯代码的答案没有用处。
    • 好的,我去看看能不能解决问题。
    • 好的。我有点明白这是怎么回事。如果我在 sysdate 上使用 - 1,我可以稍微操作一下。也许如果你解释更多,我可以看到如何修改它。总之就是提醒大家。由于今天是 12 月 1 日,我运行 sql,我希望看到 11 月 16 日到 30 日的数据。当我在 12 月 16 日这个月晚些时候运行这个脚本时,我想要从 12 月 1 日到 12 月 15 日的数据。跨度>
    • 对不起,这只是1到15,我以为你已经解决了16到30?
    • 嗯,是的,我之前使用的 where 子句假设适用于整个 2 个实例,但无论如何我想我只能有 2 个单独的脚本。不过,我真的希望能够在 1 个脚本中做到这一点。
    猜你喜欢
    • 2018-07-25
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多