有没有一种方法可以格式化日期以仅在plsql中显示月份和年份?

Stu*_*ent 2 sql oracle plsql date-formatting

December 2018做了一个传递日期参数的函数时,很难像这样仅输出月份和年份 。

我用参数做了一个简单的函数,返回的日期仅显示下面的测试代码,显示日期和年份。month如上所述,我使用了mon代替了mon,但是在eg之间有一个差距December 2019

function get_month(p_month DATE DEFAULT sysdate)
return VARCHAR2
is

v_month varchar2(50);

begin

select to_char(trunc(p_month), 'Month yyyy') into v_month from dual;

return v_month;
commit;

end;
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望以全名形式表示月份的输出,to_char(sysdate,'Month DDth, YYYY')但中间不要包含日。

Ale*_*ole 7

在文档中对此进行了解释:

Oracle使用尾随空白字符和前导零将格式元素填充为恒定宽度。宽度等于相关格式模型最大元素的显示宽度...

  • 字符元素MONTH,MON,DAY和DY用结尾空格填充到最长的完整月份名称的宽度...

但是也:

FM修饰符可抑制TO_CHAR函数的返回值中的上述填充。

因此,正如@WernfriedDomscheit在评论中所说,添加FM修饰符:

select to_char(trunc(p_month), 'FMMonth yyyy') into v_month from dual;
Run Code Online (Sandbox Code Playgroud)

尽管trunc()没有添加任何内容:

select to_char(p_month, 'FMMonth yyyy') into v_month from dual;
Run Code Online (Sandbox Code Playgroud)

或更简单地说,避免上下文切换,而直接分配:

v_month := to_char(p_month, 'FMMonth yyyy');
Run Code Online (Sandbox Code Playgroud)