Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 вывод даты в формате "31 октября 2017"  [new]
Djamal87
Member

Откуда:
Сообщений: 5
не получается вывести дату формате "31 октября 2017". с помощью функции CONVERT(nchar(10),DatePerform,106), где DatePerform-столбец с типом поля datetime, выводиться дата в виде "31 окт 2017" в необходимо "31 октября 2017". как это сделать?
1 ноя 17, 13:50    [20918850]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Djamal87
не получается вывести дату формате "31 октября 2017". с помощью функции CONVERT(nchar(10),DatePerform,106), где DatePerform-столбец с типом поля datetime, выводиться дата в виде "31 окт 2017" в необходимо "31 октября 2017". как это сделать?

declare @d datetime
set @d = convert(datetime,'2017-10-31',120)
select convert(varchar(2),datepart(dd,@d)) + ' '+
case
when datepart(mm,@d) = 1 then N'января'
when datepart(mm,@d) = 2 then N'февраля'
when datepart(mm,@d) = 3 then N'марта'
when datepart(mm,@d) = 4 then N'апреля'
when datepart(mm,@d) = 5 then N'мая'
when datepart(mm,@d) = 6 then N'июня'
when datepart(mm,@d) = 7 then N'июля'
when datepart(mm,@d) = 8 then N'Гая Юлия Октавиана Августа'
when datepart(mm,@d) = 9 then N'сентября'
when datepart(mm,@d) = 10 then N'октября'
when datepart(mm,@d) = 11 then N'ноября'
else N'декабря' end
+' '+convert(varchar(4),datepart(yyyy,@d))
--'31 октября 2017'
1 ноя 17, 13:57    [20918874]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Djamal87,

Форматировать не стал, в месяце августе поменяйте на "августа".
1 ноя 17, 13:58    [20918879]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Djamal87,

если версия позволяет

SELECT FORMAT(GETDATE(),'dd MMMM yyyy')
1 ноя 17, 14:03    [20918902]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ну и
SELECT DATENAME(MONTH, GETDATE())
1 ноя 17, 14:05    [20918915]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
TaPaK
SELECT DATENAME(MONTH, GETDATE())
Это ж именительный падеж получится!
И перед этим надо SET LANGUAGE русский;
1 ноя 17, 14:09    [20918934]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Djamal87
Member

Откуда:
Сообщений: 5
TaPaK, спасибо большое)
1 ноя 17, 14:10    [20918937]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
TaPaK
SELECT DATENAME(MONTH, GETDATE())
Это ж именительный падеж получится!
И перед этим надо SET LANGUAGE русский;

ну исходя из того что у него и так выдаёт "31 окт 2017", это не проблема :)
1 ноя 17, 14:12    [20918952]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
TaPaK
iap
пропущено...
Это ж именительный падеж получится!
И перед этим надо SET LANGUAGE русский;

ну исходя из того что у него и так выдаёт "31 окт 2017", это не проблема :)

Между именительным и родительным падежами в русском языке есть небольшая разница, так что datename автор темы будет использовать, но недолго.
1 ноя 17, 14:46    [20919084]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Andy_OLAP,
сделать самописную функцию, принимающую падеж :)
1 ноя 17, 15:17    [20919189]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Шыфл
Andy_OLAP,
сделать самописную функцию, принимающую падеж :)

Никаких фунций! Один раз заполнить таблицу [id_падежа] [smallint] NOT NULL, [number_of_month] [smallint] NOT NULL, [part_of_string] [nvarchar](100) NOT NULL, а потом inner join делать с таблицей, где столбец DatePerform и условием where id_падежа = "ключ_нужного_падежа".
1 ноя 17, 15:22    [20919207]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Andy_OLAP
Шыфл
Andy_OLAP,
сделать самописную функцию, принимающую падеж :)

Никаких фунций! Один раз заполнить таблицу [id_падежа] [smallint] NOT NULL, [number_of_month] [smallint] NOT NULL, [part_of_string] [nvarchar](100) NOT NULL, а потом inner join делать с таблицей, где столбец DatePerform и условием where id_падежа = "ключ_нужного_падежа".
Что за сыр-бор? Месяцев-то всего 12!
1 ноя 17, 19:10    [20920005]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
iap
Andy_OLAP
пропущено...

Никаких фунций! Один раз заполнить таблицу [id_падежа] [smallint] NOT NULL, [number_of_month] [smallint] NOT NULL, [part_of_string] [nvarchar](100) NOT NULL, а потом inner join делать с таблицей, где столбец DatePerform и условием where id_падежа = "ключ_нужного_падежа".
Что за сыр-бор? Месяцев-то всего 12!

В календаре эпохи Шан от 12 до 14 месяцев. Но тут сыр-бор о том, что человеку нужно не "январь", а "января". То есть название месяца не из datename(), а из case из 12 вариантов.
Но. Коллега чуть выше предложил разнообразить - вызывать функцию, которой передавать номер месяца и вариант нужного падежа.
Давайте посмотрим на задачу чуть шире - мало ли кому пригодится.
Сколько может быть падежей в вариантах, которые должна возвращать SQL база. Расмотрим сокращенный перечень из 6 базовых.

Именительный - да. "Январь 2017", "Февраль 2017" в отчетах. Нужен.
Родительный - да. "31 января 2017". Нужен.
Дательный. "Январю" - не нужен.
Винительный - "январь", "февраль", совпадает с именительный, не нужен.
Творительным - "январем", "февралем", "закрыли отчет апрелем 2016-го". Нужен.
Предложный - "об январе", "рассмотреть в отчете вопрос о феврале", ну с натяжкой, но допустим. Нужен.
Итого 12 месяцев на 4 падежа = 48 вариантов в функции. Или 48 строк в заранее приготовленной таблице.
1 ноя 17, 19:21    [20920030]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33700
Блог
коллеги, вы меня расстраиваете

К сообщению приложен файл. Размер - 30Kb
1 ноя 17, 19:35    [20920045]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты в формате "31 октября 2017"  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Критик
коллеги, вы меня расстраиваете

Представим, что версия 2008R2. Автор темы ведь не написал в явном виде, что у него 2012 и моложе.
1 ноя 17, 19:39    [20920058]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить