Oracle:将 DD-MM-YYYY 转换为 MON-YYYY

时间:2021-05-28 17:26:51

标签: sql database oracle

在以下代码中,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

2 个答案:

答案 0 :(得分:1)

由于您的日期采用 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-小提琴:

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

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

输出:

<头>
结果
APR-2020

查询条件:

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

输出:

<头>
结果
true

db<>fiddle here

答案 1 :(得分:1)

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

将字符串与字符串进行比较

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

或将日期与日期进行比较

trunc( wr.SDate, 'MM' ) = date '2020-04-01'
相关问题