Прокручивать собственные расчеты календаря может быть сложно. Вероятно, более надежно использовать встроенные функции.
Например, вы можете найти первый день любого месяца, например:
DATEADD(mm, DATEDIFF(m,0,DateColumn),0)
Выполнение datediff
между ними даст вам количество дней в этом месяце. Вы могли бы сделать то же самое в течение многих лет:
select
datediff(d,
DATEADD(mm, DATEDIFF(mm,0,getdate()),0),
DATEADD(mm, DATEDIFF(mm,0,getdate())+1,0))
as NumOfDaysThisMonth,
datediff(d,
DATEADD(yy, DATEDIFF(yy,0,getdate()),0),
DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))
as NumOfDaysThisYear
Этот пример работает на SQL Server, надеюсь, есть эквивалент на Sybase:)