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

Откуда:
Сообщений: 97
Нужно вывести предыдущий месяц в таком формате 201812, если функцию dateadd использовать то разумеется неправильно считает.
select dateadd (month,-1,201901) 


результат =2452-09-14 00:00:00.000 а нужен 201812
13 авг 19, 10:35    [21947762]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 283
Romanov-krd,

select dateadd (month,-1,201901*100+1)
select case when 201901 %100 =1 then (201901/100-1)*100+12 else 201901-1 end
13 авг 19, 10:40    [21947768]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 283
первый нерабочий:
select dateadd (month,-1,cast(201901 as varchar(10)) +'01')
13 авг 19, 10:42    [21947769]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
iap
Member

Откуда: Москва
Сообщений: 46815
Romanov-krd
Нужно вывести предыдущий месяц в таком формате 201812, если функцию dateadd использовать то разумеется неправильно считает.
select dateadd (month,-1,201901) 



результат =2452-09-14 00:00:00.000 а нужен 201812
Потому что 201901 - это целое число.
При преобразованию в дату получается 1 января 1900 года + 201901 дней.
Число 201901 надо задавать в одинарных кавычках (как строку) - '201901'
13 авг 19, 11:04    [21947812]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
iap
Member

Откуда: Москва
Сообщений: 46815
iap
Romanov-krd
Нужно вывести предыдущий месяц в таком формате 201812, если функцию dateadd использовать то разумеется неправильно считает.
select dateadd (month,-1,201901) 




результат =2452-09-14 00:00:00.000 а нужен 201812
Потому что 201901 - это целое число.
При преобразованию в дату получается 1 января 1900 года + 201901 дней.
Число 201901 надо задавать в одинарных кавычках (как строку) - '201901'
Ой! Прошу прощения! Надо же и число там задать: '20190101'

Хотя, для первого января можно указывать только 4 цифры года. Но это только для 1 января!
13 авг 19, 11:06    [21947817]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
Romanov-krd
Member

Откуда:
Сообщений: 97
Kopelly,

да. там в первом случае формат такой получается 2018-12-01 00:00:00.000
а нужен 201812

а без кейсов как нибудь можно? вот в терадате норм функция есть
ADD_MONTHS_ID ( 201901 , -1) которая все возвращает а в ms sql найти такую не могу
13 авг 19, 11:13    [21947827]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
andy st
Member

Откуда:
Сообщений: 741
Romanov-krd,
create function add_months_id(@dt int, @incr int)
returns int
as 
begin 
  return cast(convert(varchar(6),dateadd(month,@incr,cast(@dt as varchar(20))+'01'),112)as int)	
end

select dbo.add_months_id(201901,-1)
13 авг 19, 11:44    [21947868]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19152
select format(dateadd(month,-1,'20190101'),'yyyyMM') 
13 авг 19, 11:46    [21947870]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 283
Romanov-krd
да. там в первом случае формат такой получается 2018-12-01 00:00:00.000
а нужен 201812


100*Year(dateadd())+Month(dateadd())
13 авг 19, 12:14    [21947918]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести предыдущий месяц в формате 201812  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6639
Romanov-krd,

select convert(char(6), dateadd(month, -1, getdate()), 112);
13 авг 19, 12:38    [21947963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить