我的数据库包含一个句号(月份)和一年 - 我正在尝试将其转换为日期。我不关心这个月的实际日期,所以我刚刚把它设为“1”(本月的第1天)。
在我的代码中,由于一年中的12个月,我不得不将“13th”期间转换为12期,所以我的解码就完成了那部分......最终,我希望它作为日期返回。我有一个串联使它看起来像一个约会,但实际上并不是约会。
我对数据的处理是查询并将其返回到Excel中以进行进一步操作。导入到Excel时,它不会作为日期导入,也不能让我转换为日期格式。
SELECT DIA_PROJECT_DETAIL.FY_DC || '/' ||
decode(DIA_PROJECT_DETAIL.PER_DC,1,1,2, 2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,12)||
'/01' as "Date"
FROM AMS.DIA_PROJECT_DETAIL DIA_PROJECT_DETAIL
必须有一种更简单或更有效的方法来做到这一点!
答案 0 :(得分:1)
没有更简单的方法。 DECODE
适用于将第13个月转换为第12个月,但您使用它有点过于复杂。然后你不应该依赖会话设置,而是明确地告诉DBMS你的解释字符串代表的日期格式。以适当的格式使用TO_DATE
。
select
to_date(fy_dc || to_char(decode(per_dc, 13, 12, per_dc), '00') || '01', 'yyyymmdd')
as "Date"
from ams.dia_project_detail dia_project_detail;
答案 1 :(得分:0)
只需使用least()
:
SELECT (DIA_PROJECT_DETAIL.FY_DC || '/' ||
LEAST(DIA_PROJECT_DETAIL.PER_DC, 12) ||
'/01'
) as "Date"
FROM AMS.DIA_PROJECT_DETAIL DIA_PROJECT_DETAIL;