返回日期的SQL查询
问题描述:
我的数据库包含句点(月)和年份 - 我试图将其转换为日期。我不在乎这个月的实际日子,所以我刚刚做到了“1”(本月的第一天)。返回日期的SQL查询
在我的代码中,由于一年中的12个月,我必须将“第13”期转换为第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
必须有一个更容易或更有效的方法来做到这一点!
答
没有更简单的方法。 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;
+0
这工作完美 - 作为一个新的编码器,我相信我已经过了复杂的查询。谢谢您的帮助! – davidij
答
只需使用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;
请提供FY_DC和PER_DC领域的一些样本数据。 – SandPiper
与你的问题并不真正相关,但如果你的数值上升到13,你确定'period'等于'month';他们不是说4周的时间?和/或从日历月份的偏移? –
是的,期间是月份。第13个月是为了捕捉那些在12月份没有成功但是属于今年的零星参赛作品 - 团队提出了第13个月的想法,以允许在下一年的一月份进行这些参赛作品。 - 良好的后续问题。 – davidij