Несколько часто применяемых функций даты и времени в MSSQL.
CREATE FUNCTION [BEGDAY] (@DAT DATETIME) RETURNS DATETIME with schemabinding AS /* Возвращает начало дня: 2014-05-19 00:00:00.000 */ BEGIN DECLARE @RET DATETIME set @RET = null SET @RET=cast(cast(@DAT as date) as datetime) RETURN @RET END GO CREATE FUNCTION [ENDDAY] (@DAT DATETIME) RETURNS DATETIME with schemabinding AS /* Возвращает конец дня: 2014-05-19 23:59:59.997 */ BEGIN DECLARE @RET DATETIME set @RET = null SET @RET=(convert(datetime, convert(varchar, @DAT, 101) + ' 23:59:59.998')) RETURN @RET END GO CREATE FUNCTION [BEGMONTH] (@DAT DATETIME) RETURNS DATETIME with schemabinding AS /* Возвращает начало месяца: 2014-05-01 00:00:00.000 */ BEGIN DECLARE @RET DATETIME set @RET = null SET @RET=convert(date,dateadd(day,1-day(@DAT),@DAT)) RETURN @RET END GO CREATE FUNCTION [ENDMONTH] (@DAT DATETIME) RETURNS DATETIME with schemabinding AS /* Возвращает конец месяца: 2014-05-31 00:00:00.000 */ BEGIN DECLARE @RET DATETIME set @RET = null SET @RET=convert(datetime, convert(varchar, dateadd(month,1,dateadd(day,1-day(@DAT),@DAT))-1, 101)) RETURN @RET END GO
Примеры вызова функций:
select [BEGDAY] ('2014-04-23 09:45:21') dt select [BEGDAY] ('2014-04-23') dt dt -- 2014-04-23 00:00:00.000 select [ENDDAY] ('2014-04-23 09:45:21') dt select [ENDDAY] ('2014-04-23') dt dt -- 2014-04-23 23:59:59.997 select [BEGMONTH] ('2014-04-23 09:45:21') dt select [BEGMONTH] ('2014-04-23') dt dt -- 2014-04-01 00:00:00.000 select [ENDMONTH] ('2014-04-23 09:45:21') dt select [ENDMONTH] ('2014-04-23') dt dt -- 2014-04-30 00:00:00.000