У меня проблемы с выводом только месяца и года, как это
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')
, но без дня в середине.
Параметр «Месяц» в строке формата, похоже, генерирует вывод с дополнительными пробелами, вы можете обрезать их, чтобы получить требуемый результат.
Попробуй это:
select trim(to_char(sysdate,'Month'))||' '||to_char(sysdate,'yyyy')
from dual;
Это объясняется в документации:
Oracle uses trailing blank characters and leading zeroes to fill format elements to a constant width. The width is equal to the display width of the largest element for the relevant format model ...
- The character elements MONTH, MON, DAY, and DY are padded with trailing blanks to the width of the longest full month name ...
Но также:
The FM modifier suppresses the above padding in the return value of the TO_CHAR function.
Итак, как сказал @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');
Попробуйте формат
'fmMonth yyyy'