Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод последниго дня месяца! / 7 сообщений из 7, страница 1 из 1
17.10.2002, 17:05:44
    #32059344
Максим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
Всем привет!
Каким образом можно вывести последний день в каждом месяце(30, 31 или 28)?
...
Рейтинг: 0 / 0
17.10.2002, 17:23:08
    #32059355
Максим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
Вот примерно то, что у меня сейчас есть
declare @dtime char(8)
set @dtime = '2002/09/'
@dtime+'30 23:59:59'
Но меня волнует вопрос с 30 в этом запросе! Ведь может быть и 31 и 28!!!!
...
Рейтинг: 0 / 0
17.10.2002, 17:27:45
    #32059359
vap
vap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
-- Добавить к вашей дате 1 месяц.
set @dat = DATEADD(month, 1, @dat)

-- Отнять из дни
set @dat = DATEDIFF(day, DATEPART(day, @dat), @dat)
...
Рейтинг: 0 / 0
17.10.2002, 17:28:45
    #32059361
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
Код: plaintext
1.
2.
3.
DECLARE @YearMonth varchar( 8 )
Set @YearMonth='200202'

Select Day(DateAdd(dd,- 1 ,DateAdd(mm, 1 ,@YearMonth+'01')))
...
Рейтинг: 0 / 0
17.10.2002, 17:29:05
    #32059363
dao
dao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
смотри в самом конце Не знаю правильно или нет не проверял но смыл точно правильный!
...
Рейтинг: 0 / 0
18.10.2002, 12:18:35
    #32059599
ura
ura
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
Вот, может кому пригодится...
Ф-ция GetPeriodDate выдает по переданной дате дату начала/конца периода
Ф-ция LastDayOfMonth выдает последний день месяца
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
create function LastDayOfMonth(@DT datetime)
returns datetime
as
begin
 /*{ Конвертит дату в последний день месяца }*/ 
declare @M pk
,@Y pk

select @M=Month(@DT), @Y=Year(@DT)

if @M<> 12 
	set @DT=Dateadd(day,- 1 ,convert(datetime,'01.'+CONVERT(char( 2 ),@M+ 1 )+'.'+CONVERT(char( 4 ),@Y), 104 ))
else
	set @DT=convert(datetime,'31.12.'+CONVERT(char( 4 ),@Y), 104 )
return @DT
end
GO
create function GetPeriodDate
(@DT datetime		 -- Дата
 
,@PERIOD_ID pk		 -- id периода (см. табл. "vartp")
 
,@PERIOD_DT_ID pk	 -- Дата в периоде (см. view "setdate") 1-начальная, 2-текущая, 3-конечная
 
)
returns datetime
as
begin
 /*{ Возвращает дату начала(конца) периода }*/ 
declare 
 @K pk
,@K1 pk

if @PERIOD_DT_ID in ( 1 , 3 ) begin
	if @PERIOD_ID= 2   -- день
 
		set @DT=Convert(datetime,FLOOR(Convert(float,@DT)))
	else
	if @PERIOD_ID= 3  begin  -- неделя
 
		if @PERIOD_DT_ID= 3  set @K= 7 
		else
			set @K= 0 
		set @DT=DateAdd(day,@K-DatePart(weekday,@DT)+ 1 ,@DT)
	end
	else
	if @PERIOD_ID= 4  begin  -- декада
 
		set @K=Day(@DT)
		set @K1=case when @K<= 10  then  1  when @K<= 20  then  11  else  21  end
		if @PERIOD_DT_ID= 3  and @K1<> 21  set @K1=@K1+ 9 
		if not(@PERIOD_DT_ID= 3  and @K1= 21 )
			set @DT=DateAdd(day,@K1-@K,@DT)
		else
			set @DT=dbo.LastDayOfMonth(@DT)
	end
	else
	if @PERIOD_ID= 5  begin  -- месяц
 
		if @PERIOD_DT_ID= 3   -- конец месяца
 
			set @DT=dbo.LastDayOfMonth(@DT)
		else	 -- начало месяца
 
			set @DT=Dateadd(day,-DatePart(day,@DT)+ 1 ,@DT)
	end
	else
	if @PERIOD_ID= 6  begin  -- квартал
 
			if @PERIOD_DT_ID= 3   -- конец квартала
 
				set @K= 0 
			else
				set @K= 1 
			set @DT=convert(datetime,'1.'+CONVERT(char( 2 ),(DatePart(quarter,@DT)-@K)* 3 +@K)+'.'+CONVERT(char( 4 ),Year(@DT)), 104 )
				 --DateAdd(month,-((DatePart(month,@DT)-(DatePart(quarter,@DT)-1)*3)-1),@DT)
 
			if @PERIOD_DT_ID= 3 
				set @DT=dbo.LastDayOfMonth(@DT)
	end
	else
	if @PERIOD_ID= 7  begin  -- полугодие
 
			set @K=Month(@DT)
			if @PERIOD_DT_ID= 3  begin -- конец квартала
 
				if @K< 6  set @K= 5 
				else set @K= 12 
			end
			else begin
				if @K< 6  set @K= 1 
				else set @K= 6 
			end
			set @DT=convert(datetime,'1.'+CONVERT(char( 2 ),@K)+'.'+CONVERT(char( 4 ),Year(@DT)), 104 )
			if @PERIOD_DT_ID= 3 
				set @DT=dbo.LastDayOfMonth(@DT)
	end
	else
	if @PERIOD_ID= 8  begin  -- год
 
			set @K=Year(@DT)
			if @PERIOD_DT_ID= 3  begin -- конец года
 
				set @DT=convert(datetime,'31.12.'+CONVERT(char( 4 ),@K), 104 )
			end
			else begin
				set @DT=convert(datetime,'1.1.'+CONVERT(char( 4 ),@K), 104 )
			end
	end
	else 
	if @PERIOD_ID<> 1  set @DT=NULL
end
return @DT
end
GO


Может, написано не совсем оптимально, но мне подходит...
...
Рейтинг: 0 / 0
18.10.2002, 12:22:20
    #32059600
ura
ura
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последниго дня месяца!
Забыл добавить - параметр @PERIOD_ID в ф-ции GetPeriodDate

2 День
3 Неделя
4 Декада
5 Месяц
6 Квартал
7 Полугодие
8 Год
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод последниго дня месяца! / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]