【问题标题】:how get the data starting from 1st month till current date in oracle sql between two dates如何在两个日期之间在oracle sql中获取从第一个月到当前日期的数据
【发布时间】:2021-11-25 12:45:02
【问题描述】:
select count(EMP_ID) from EMPLOYEE
where created_date between trunc(SYSDATE) - (to number (to_char(SYSDATE,'DD')) - 1)  
and add_months(trunc(SYSDATE) - (to number(to char(SYSDATE,'DD')) - 1), 1) -1

但现在我想重写此查询,使其始终从每月 1 日开始获取数据,直到创建日期。因此,例如,如果我现在运行此查询,我应该获取从 2018 年 1 月 1 日到 2018 年 1 月 11 日的数据。并且我需要再添加一个日期,以便它可以从 from 和 to date 获取。

如果我在 2 月 1 日运行此查询,那么它将返回 1 月的整个月份的数据。我不确定它是否可以在单个查询中完成。

日期格式,例如 22/10/2014

【问题讨论】:

    标签: oracle oracle-sqldeveloper plsqldeveloper


    【解决方案1】:

    一个简单的选择是

    select *
    from employee
    where to_char(created_date, 'yyyymm') = to_char(sysdate, 'yyyymm')
    

    或其任何衍生物,例如

    where trunc(created_date, 'mm') = trunc(sysdate, 'mm')
    

    但是,如果created_date 上有索引,则不会使用它,因为to_chartrunc。在这种情况下,如果它很重要(因为性能受到影响),你会

    where created_date between trunc(sysdate, 'mm') and sysdate
    

    甚至

    where created_date >= trunc(sysdate, 'mm')
    

    假设将来没有创建任何行。


    如果您需要 created_date 介于两个参数之间的行,那么您会

    where created_date between to_date(:first_date , 'dd/mm/yyyy')
                           and to_date(:second_date, 'dd/mm/yyyy')
    

    假设您输入的值是dd/mm/yyyy 格式。

    【讨论】:

    • 嗨 littileffot 感谢更新,但我的日期格式是 dd/mm/yyyy 格式。如果我在这两个日期之间给出两个日期,我需要一个查询,它将获取该特定月份和日期的查询。
    • 我想你错了。 DATE 数据类型没有任何特定格式;您发布的内容(DD/MM/YYYY)只是用于表示日期值的格式掩码(通过数据库的 NLS 设置或 TO_CHAR 的格式掩码)。如果 - 另一方面 - 您将日期存储为字符串(到 VARCHAR2 列中),那么您做错了 - 尽快切换到 DATE。在您评论的下一部分:这是否意味着您要返回 CREATED_DATE 介于您作为参数输入的 2 个日期值之间的行?如果是这样,请查看已编辑的答案。
    • 是的,现在我的查询可能不正确,但是如果我想使用您提到的上述查询获取两个日期之间的数据?
    • 这是我发布的最后一个 WHERE 子句。
    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多