Как создать функцию меняющую склонение месяца? Не работает CASE() после того как засунул его в функцию

Доброго времени суток!

Необходимо вносить в договор дату в формате: "26 февраля 2024 г." Эта дата хранится в БД, ее нужно просто подгрузить и нормально отформатировать. Для этого я обращался к месяцу с помощью: LOWER(DATENAME(month, @Tdate)), однако в таком случае получается месяц в именительном падеже - "февраль".

Чтобы избежать подобной проблемы, я создал функцию:

ALTER FUNCTION [dbo].[РодПадежМес] (@Tdate varchar(12))
returns varchar(12) 
AS
BEGIN
        declare @MorphedMonth varchar(12)
        set @MorphedMonth = (case 
        when LOWER(DATENAME(month, @Tdate)) = 'январь' then 'января'
        when LOWER(DATENAME(month, @Tdate)) = 'февраль' then 'февраля'
        when LOWER(DATENAME(month, @Tdate)) = 'март' then 'марта'
        when LOWER(DATENAME(month, @Tdate)) = 'апрель' then 'апреля'
        when LOWER(DATENAME(month, @Tdate)) = 'май' then 'мая'
        when LOWER(DATENAME(month, @Tdate)) = 'июнь' then 'июня'
        when LOWER(DATENAME(month, @Tdate)) = 'июль' then 'июля'
        when LOWER(DATENAME(month, @Tdate)) = 'август' then 'августа'
        when LOWER(DATENAME(month, @Tdate)) = 'сентябрь' then 'сентября'
        when LOWER(DATENAME(month, @Tdate)) = 'октябрь' then 'октября'
        when LOWER(DATENAME(month, @Tdate)) = 'ноябрь' then 'ноября'
        when LOWER(DATENAME(month, @Tdate)) = 'декабрь' then 'декабря'
        else 'ошибка'
        end)
  return @MorphedMonth
END

Однако при использовании этой функции в запросе выдает ошибку

declare @Tdate datetime
Set @Tdate=GETDATE()
Select dbo.РодПадежМес(Lower(DATENAME(month, @Tdate))) as 'MorphedMonth'
FROM Таблица

введите сюда описание изображения

Как сделать так, чтобы эта функция заработала?


Ответы (1 шт):

Автор решения: Nofate

Форматирование даты с правильными склонениями месяца работает из коробки без велосипедов:

SELECT FORMAT(GETDATE(), 'dd MMMM yyyy', 'ru-RU')

---------------
01 февраля 2024
→ Ссылка