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

时间:2019-05-28 14:24:35

标签: sql oracle plsql date-formatting

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

我做了一个带有参数的简单函数,返回的日期仅显示下面的测试代码,显示月份和年份。我使用month代替了如上所述的mon,但是例如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;

理想情况下,我希望全月的输出像to_char(sysdate,'Month DDth, YYYY'),但中间没有一天。

2 个答案:

答案 0 :(得分:7)

这是in the documentation的解释:

  

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

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

而且:

  

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

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

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

尽管trunc()并未添加任何内容,

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

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

v_month := to_char(p_month, 'FMMonth yyyy');

答案 1 :(得分:1)

格式字符串中的Month选项似乎正在生成带有多余空格的输出,您可以对其进行修整以获得所需的结果。

尝试一下:

select trim(to_char(sysdate,'Month'))||' '||to_char(sysdate,'yyyy')
from dual;