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

Откуда:
Сообщений: 12
Есть цифровая переменная в поле БД, например в формате месяцгод - 122012. Нужно чтобы фуункция, а потом вьюшка в Access выдавала прошлый месяц. Скажем, если задана переменная 012013, то выдавала бы 122012. Могу многое рассказать в оправдание, но прошу помочь.
23 дек 12, 21:19    [13674054]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Хранить надо в формате ГодМесяц:
DECLARE @YM INT = 201213;
SELECT PreviousMonth = @YM - 1;
23 дек 12, 21:38    [13674103]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
Хранить надо в формате ГодМесяц:
DECLARE @YM INT = 201213;
SELECT PreviousMonth = @YM - 1;
23 дек 12, 21:51    [13674138]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
21sasha07
Member

Откуда:
Сообщений: 12
в моём понимании это просто (201213 -1) = 201212 ??
23 дек 12, 21:52    [13674139]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
21sasha07
Member

Откуда:
Сообщений: 12
Надо, да. Задел не мой. Вводные плОхи. Трудно переделывать
23 дек 12, 21:54    [13674146]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
21sasha07
Member

Откуда:
Сообщений: 12
Сорри,Надо, да. Задел не мой. Вводные плОхи. Трудно переделывать
23 дек 12, 21:55    [13674148]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
Хранить надо в формате ГодМесяц:
DECLARE @YM INT = 201213;
SELECT PreviousMonth = @YM - 1;
Это, конечно, неправильно, хотя бы потому, что иожет получиться нулевой месяц.
Например, можно так:
DECLARE @MY INT = 12013;
SELECT CAST(REPLACE(RIGHT(CONVERT(VARCHAR(10),DATEADD(MONTH,-1,STR(@MY%10000*10000+@MY/10000*100+1)),104),7),'.','')AS INT);
23 дек 12, 22:21    [13674250]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
21sasha07
Member

Откуда:
Сообщений: 12
Спс, завтра попробую и обязательно отпишусь
23 дек 12, 22:29    [13674265]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
21sasha07
Есть цифровая переменная в поле БД, например в формате месяцгод - 122012. Нужно чтобы фуункция, а потом вьюшка в Access выдавала прошлый месяц. Скажем, если задана переменная 012013, то выдавала бы 122012. Могу многое рассказать в оправдание, но прошу помочь.

Access - вы форумом, сэр, не ошиблись?

Аксес так делать:

крокодил = 122012

крокодил \ 10000 = число месяцев
крокодил - ( крокодил \ 10000 ) * 10000 = число лет
крокодил - ( крокодил \ 10000 ) * 10000 * 12 + ( крокодил \ 10000) = число месяцев общее = сыр

(сыр \ 12) = число полных лет
сыр - (сыр \ 12) = число месяцев

(сыр - (сыр \ 12)) * 10000 + (сыр \ 12) = крокодил

На каком этапе единицу прибавить/отнять, думаю понятно. :-)
24 дек 12, 01:22    [13674666]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Правда я на вскидку писал, не проверяя. Так что возможно накосячил слегка. Ну суть, думаю, ясна.
24 дек 12, 01:25    [13674669]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
21sasha07
Member

Откуда:
Сообщений: 12
iap
iap
Хранить надо в формате ГодМесяц:
DECLARE @YM INT = 201213;
SELECT PreviousMonth = @YM - 1;
Это, конечно, неправильно, хотя бы потому, что иожет получиться нулевой месяц.
Например, можно так:
DECLARE @MY INT = 12013;
SELECT CAST(REPLACE(RIGHT(CONVERT(VARCHAR(10),DATEADD(MONTH,-1,STR(@MY%10000*10000+@MY/10000*100+1)),104),7),'.','')AS INT);


Спасибо, всё получилось.
26 дек 12, 11:40    [13687370]     Ответить | Цитировать Сообщить модератору
 Re: прошлый месяц в SQL  [new]
kirser
Member

Откуда: Киев
Сообщений: 225
21sasha07,
как вариант
DECLARE @YM VARCHAR(6)='012013'
SELECT 
	@YM as [Было], 
	CAST(DATEPART(MONTH,DATEADD(DAY,-1,CAST(SUBSTRING(@YM,3,4)+'-'+SUBSTRING(@YM,1,2)+'-'+'01' as DATE))) as VARCHAR(2))
		+ CAST(DATEPART(YEAR,DATEADD(DAY,-1,CAST(SUBSTRING(@YM,3,4)+'-'+SUBSTRING(@YM,1,2)+'-'+'01' as DATE))) as VARCHAR(4)) as  [Стало]
28 дек 12, 17:47    [13702112]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить