【问题标题】:Oracle : Convert DD-MM-YYYY to MON-YYYYOracle:将 DD-MM-YYYY 转换为 MON-YYYY
【发布时间】:2021-05-28 17:26:51
【问题描述】:

在下面的代码SDate ='10-04-2020' 中,格式为 DD-MM-YYYY,我只需要将月份和年份与给定的日期(MON-YYYY)进行比较

SELECT WR.EmpID AS EMPSID, SUM(WR.ESALARY) AS TOTAL_SALARY
FROM WEEKLY_REPORT WR
WHERE WR.EmpID = 'E009' AND TO_CHAR(WR.SDate,'MON-YYYY') = TO_CHAR('APR-2020','MON-YYYY') 
GROUP BY WR.EmpID;

错误 ORA-01722: invalid number

【问题讨论】:

  • SDate的数据类型是什么?假设它是日期,您不应该在任何地方使用 to_char()to_date 并格式化模型。相反,您应该将SDatewhere 子句中的固定日期(>= date '2020-04-01'< date '2020-05-01')进行比较。

标签: sql database oracle


【解决方案1】:

SDate 是一个日期吗?如果是这样,它没有格式。将字符串传递给to_char 是没有意义的。 'APR-2020' 已经是一个字符串了。

比较一个字符串和一个字符串

TO_CHAR(WR.SDate,'MON-YYYY') = 'APR-2020'

或者比较日期和日期

trunc( wr.SDate, 'MM' ) = date '2020-04-01'

【讨论】:

    【解决方案2】:

    由于您的日期是 dd-mm-yyyy 格式,您需要在使用 to_char() 之前使用to_date(WR.SDate,'dd-mm-yyyy')。而不是 TO_CHAR('APR-2020','MON-YYYY') 使用 'APR-2020' 这是一个有效的字符串。

    SELECT WR.EmpID AS EMPSID, SUM(WR.ESALARY) AS TOTAL_SALARY
    FROM WEEKLY_REPORT WR
    WHERE WR.EmpID = 'E009' AND TO_CHAR(to_date(WR.SDate,'dd-mm-yyyy'),'MON-YYYY') = 'APR-2020' 
    GROUP BY WR.EmpID;
    

    DB-Fiddle:

    查询将日期转换为 mon-yyyy:

     select TO_CHAR(to_date('10-04-2020','dd-mm-yyyy'),'MON-YYYY') result from dual
    

    输出:

    RESULT
    APR-2020

    查询条件:

     select 'true' result  from dual
     where TO_CHAR(to_date('10-04-2020','dd-mm-yyyy'),'MON-YYYY') = 'APR-2020'
    

    输出:

    RESULT
    true

    db小提琴here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多