我很难像这样仅输出月份和年份
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')
,但中间没有一天。
答案 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;