Есть ли способ отформатировать дату, чтобы в plsql отображались только месяц и год?

У меня проблемы с выводом только месяца и года, как это 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'

Wernfried Domscheit 28.05.2019 16:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
1
454
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Параметр «Месяц» в строке формата, похоже, генерирует вывод с дополнительными пробелами, вы можете обрезать их, чтобы получить требуемый результат.

Попробуй это:

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');

Другие вопросы по теме