【问题标题】:Get the records of last month in SQLSQL获取上个月的记录
【发布时间】:2015-10-09 14:30:42
【问题描述】:

我想根据我的数据库表 [note] 字段“date_created”获取上个月的记录。

执行此操作的 sql 是什么?

上个月 - 2015-08-30 到 2015-09-30

我使用了以下来自链接的查询,但 get last three month records from table 但得到错误 ORA-30089: missing or invalid

select *
from   note
where  to_date(DATE_CREATED)  >  to_date(CURRENT_DATE) - to_date(INTERVAL '3 months')

即使我使用了以下查询,但仍然出现错误:ORA-01861:文字与格式字符串不匹配

select *
from   note 
where  to_date(DATE_CREATED) BETWEEN '2015-08-30 00:00:00.0' AND '2015-09-30 00:00:00.0'

【问题讨论】:

  • 你使用的是 SQL-Server?
  • 这是oracle首席ORA-....
  • 这必须是 2018 版本,存在 ORA 错误
  • DATE_CREATED 列的数据类型是什么?

标签: sql oracle


【解决方案1】:

这不是 Oracle 语法。 如果要使用 INTERVAL,则只能使用 YEAR_TO_MONTH 或 DAY_TO_SECOND 间隔。

看起来像这样(过去 3 个月):

select *
from   note
where  to_date(DATE_CREATED)  >  to_date(CURRENT_DATE) - INTERVAL '0-3' YEAR TO MONTH

或者您可以使用标准函数 ADD_MONTHS:

select *
from   note
where  to_date(DATE_CREATED)  > ADD_MONTHS( to_date(CURRENT_DATE), -3)

ADD_MONTHS 会将月份添加到您的日期。可以是正面的也可以是负面的

【讨论】:

  • 不要使用INTERVAL加减月份;如果您从 5 月 31 日减去 3 个月,那么您将得到 2 月 31 日,这不是有效日期,Oracle 将引发异常。只需使用ADD_MONTHS,它可以很好地处理此类问题。
【解决方案2】:

也尝试在文字字符串上使用 TO_DATE。

select * from note where to_date(DATE_CREATED) BETWEEN TO_DATE('2015-08-30', 'YYYY-MM-DD') AND TO_DATE('2015-09-30', 'YYYY-MM-DD');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2021-07-30
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多