![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Количесво дней в месяце [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))
Удачи!