【问题标题】:SQL Query to get the first day of the month passed in the parameter of the current yearSQL查询获取传入当年参数的月份的第一天
【发布时间】:2020-09-15 02:15:05
【问题描述】:

我想获取参数中传入的月份的第一天和最后一天。

我尝试使用以下查询,但出错了。

select LAST_DAY(to_date(to_char(('01'||:P_MONTH||'2020'),'DDMMYYYY'),'YYYYMM'))
FROM DUAL

我想在查询中使用它

select * from
GL_CODE_TAB
where effective_start_date = LAST_DAY(to_date(to_char(('01'||:P_MONTH||'2020'),'DDMMYYYY'),'YYYYMMDD'))

并在表格 GL_CODE_TAB 中搜索我过去一个月的第一天/最后一天,例如如果我通过“五月”

select * from
GL_CODE_TAB
where effective_start_date = LAST_DAY(to_date(to_char(('01'||'May'||'2020'),'DDMMYYYY'),'YYYYMMDD'))

应该像这样进行搜索

 select * from
    GL_CODE_TAB
    where effective_start_date = '20200531'

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 嗨,我已经编辑了我的问题

标签: sql oracle date oracle-sqldeveloper where-clause


【解决方案1】:

你的逻辑有些不对劲。您不需要将字符串转换为字符串。所以,我在想:

SELECT LAST_DAY(TO_DATE('01' || :P_MONTH || '2020', 'DDMMYYYY'))
FROM DUAL

模式MM 正在寻找一个数字月份。 (您的查询中还有两次格式模式'DDMMYYYY';我不知道为什么。)

碰巧的是,Oracle 将年份默认为当前年份,将月份中的日期默认为当前月份。所以,你甚至不需要弄乱字符串:

SELECT LAST_DAY(TO_DATE(:P_MONTH , 'MM'))
FROM DUAL;

以上假设您的参数有一个 数字 值。如果你想处理一个字符串,那么:

SELECT LAST_DAY(TO_DATE('01' || :P_MONTH || '2020', 'DDMONYYYY'))
FROM DUAL

或者:

SELECT LAST_DAY(TO_DATE(:P_MONTH , 'MON'))
FROM DUAL;

如果您想传递完整的月份名称,请使用 MONTH 而不是 MON

【讨论】:

  • 哦,我不知道最后的解决方案。。谢谢!
  • 我收到错误 ORA-01843: not a valid month when I use LAST_DAY(TO_DATE(:P_MONTH , 'MON'))
【解决方案2】:

TO_CHAR() 的内部调用是问题所在。只需按如下方式使用TO_DATE(),并将正确的格式说明符作为第二个参数:

SELECT LAST_DAY(TO_DATE('01 ' || :P_MONTH || ' 2020'),'DD MONTH YYYY'))
FROM DUAL

不清楚该参数是完整的月份名称还是缩写的月份名称(May 在这方面不明确)。我以为是前者。如果这是一个短名称,请改用'DD MON YYYY'

在您的查询中:

SELECT * 
FROM GL_CODE_TAB
WHERE effective_start_date = LAST_DAY(TO_DATE('01 ' || :P_MONTH || ' 2020'),'DD MONTH YYYY'))

【讨论】:

    【解决方案3】:

    如果你在where子句中需要20200531,我想你想要

    select to_char(last_day(to_date(('01'||'May'||'2020'),'DDMMYYYY')), 'YYYYMMDD')
    from dual;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2020-12-08
      • 2014-11-21
      • 2017-10-29
      相关资源
      最近更新 更多