【问题标题】:Is there a way to format date to only show month and year in plsql?有没有办法将日期格式化为仅在 plsql 中显示月份和年份?
【发布时间】:2019-05-28 22:41:37
【问题描述】:

我很难像这样只输出月份和年份 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'),但中间没有日期。

【问题讨论】:

  • 试试格式'fmMonth yyyy'

标签: sql oracle plsql date-formatting


【解决方案1】:

这是解释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');

【讨论】:

    【解决方案2】:

    格式字符串中的 Month 选项似乎会生成带有额外空格的输出,您可以修剪它们以获得所需的结果。

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2020-07-23
      • 2011-06-27
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多