Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Romanov-krd Member Откуда: Сообщений: 122 |
Нужно вывести предыдущий месяц в таком формате 201812, если функцию dateadd использовать то разумеется неправильно считает.select dateadd (month,-1,201901) результат =2452-09-14 00:00:00.000 а нужен 201812 |
13 авг 19, 10:35 [21947762] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
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] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
первый нерабочий: select dateadd (month,-1,cast(201901 as varchar(10)) +'01') |
13 авг 19, 10:42 [21947769] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
При преобразованию в дату получается 1 января 1900 года + 201901 дней. Число 201901 надо задавать в одинарных кавычках (как строку) - '201901' |
||
13 авг 19, 11:04 [21947812] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Хотя, для первого января можно указывать только 4 цифры года. Но это только для 1 января! |
||||
13 авг 19, 11:06 [21947817] Ответить | Цитировать Сообщить модератору |
Romanov-krd Member Откуда: Сообщений: 122 |
Kopelly, да. там в первом случае формат такой получается 2018-12-01 00:00:00.000 а нужен 201812 а без кейсов как нибудь можно? вот в терадате норм функция есть ADD_MONTHS_ID ( 201901 , -1) которая все возвращает а в ms sql найти такую не могу |
13 авг 19, 11:13 [21947827] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
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] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
select format(dateadd(month,-1,'20190101'),'yyyyMM') |
13 авг 19, 11:46 [21947870] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
100*Year(dateadd())+Month(dateadd()) |
||
13 авг 19, 12:14 [21947918] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Romanov-krd,select convert(char(6), dateadd(month, -1, getdate()), 112); |
13 авг 19, 12:38 [21947963] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |