Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Количесво дней в месяце [MSSQL]


MakNik ©   (2005-10-26 14:36:00) 

Есть поле типа DateTime.
Подскажите, плз., как в запросе получить количество дней в месяце?


Fay   (2005-10-26 19:54:00) [1]

2 MakNik   (26.10.05 16:22) [8]

create function dbo.EncodeDate(@Year int, @Month int, @Day int)
returns datetime
as
begin
 return(dateadd(d, @Day - 1, dateadd(m, @Month - 1, dateadd(yy, @Year - 1753, '17530101'))))
end


Zz_   (2005-10-26 18:47:00) [2]

>> return(   Convert(DateTime,  
>>Convert(nvarchar(4),@Year)+'-'+Convert(nvarchar(2),@Month)+'-'+Convert(nvarchar(2),@Day))  
>>)END


declare @Y int, @M int, @D int
select  @Y = 2005, @M = 1, @D = 11

set dateformat dmy
print Convert(DateTime,  Convert(nvarchar(4),@Y)+'-'+Convert(nvarchar(2),@M)+'-'+Convert(nvarchar(2),@D))
print dateadd(dd,@D-1,dateadd(mm,@M-1,dateadd(yy,@Y-1900,0)))
print dateadd(dd,0,convert(varchar, @Y*10000 + @M*100 + @D))

set dateformat mdy
print Convert(DateTime,  Convert(nvarchar(4),@Y)+'-'+Convert(nvarchar(2),@M)+'-'+Convert(nvarchar(2),@D))
print dateadd(dd,@D-1,dateadd(mm,@M-1,dateadd(yy,@Y-1900,0)))
print dateadd(dd,0,convert(varchar, @Y*10000 + @M*100 + @D))


MakNik   (2005-10-26 16:22:00) [3]

сделал так:
CREATE FUNCTION dbo.EncodeDate(@Year int, @Month int, @Day int)
RETURNS DateTime
AS  
BEGIN
return(   Convert(DateTime,  Convert(nvarchar(4),@Year)+'-'+Convert(nvarchar(2),@Month)+'-'+Convert(nvarchar(2),@Day))   )
END


Возможно есть более рациональный способ?


Ega23   (2005-10-26 16:05:00) [4]

YEAR, MONTH и DATE тебе помогут


MakNik   (2005-10-26 15:56:00) [5]

Спасибо!
еще один вопросик... чтобы не начинать новую ветку...
Подскажите, плз., как сделать ф-цию аналог EncodeDate(Year, Month, Day)?


MOA   (2005-10-26 15:07:00) [6]

Согласен.


Fay   (2005-10-26 15:01:00) [7]

2 MOA ©   (26.10.05 14:57) [3]
Ню-ню.
select dbo.fn_DaysInMonth('19000131')


MOA   (2005-10-26 14:57:00) [8]

Ну, если не намёками - то ещё проще ;):

create function fn_DaysInMonth(@D datetime)
returns int
as
begin
return(DATEDIFF(dd, @D, DATEADD(mm,1,@D)))
end

;)


Fay   (2005-10-26 14:53:00) [9]

2 MOA ©   (26.10.05 14:42) [1]
Я бы даже сказал

use pubs
go

if object_id('dbo.fn_DaysInMonth') is not null
 drop function fn_DaysInMonth
go
create function fn_DaysInMonth(@dt datetime)
returns int
as
begin
 declare @dt1 datetime

 select @dt = dateadd(dd, 1 - datepart(dd, @dt), @dt)
 select @dt1 = dateadd(mm, 1, @dt)
 return(datediff(dd, @dt, @dt1))
end
go

select dbo.fn_DaysInMonth(GetDate())


MOA   (2005-10-26 14:42:00) [10]

DECLARE @D Datetime, @D1 Datetime
SET @D='20050215'
SET @D1='20040215'
SELECT DATEDIFF(dd, @D, DATEADD(mm,1,@D)), DATEDIFF(dd, @D1, DATEADD(mm,1,@D1))

Удачи!


Наверх

Титульная страница Поиск, карта сайта Написать письмо