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

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

Select Day(DateAdd(dd,- 1 ,DateAdd(mm, 1 ,@YearMonth+'01')))
...
Рейтинг: 0 / 0
Вывод последниго дня месяца!
    #32059363
dao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотри в самом конце Не знаю правильно или нет не проверял но смыл точно правильный!
...
Рейтинг: 0 / 0
Вывод последниго дня месяца!
    #32059599
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
Вывод последниго дня месяца!
    #32059600
ura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить - параметр @PERIOD_ID в ф-ции GetPeriodDate

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


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