Как создать функцию меняющую склонение месяца? Не работает 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
