T-SQL 找出DateTime月份的最早一天與最後一天

找出DateTime月份的最早一天與最後一天

--求月份的第一天
SELECT CONVERT(datetime, 0)        --1900-01-01 00:00:00.000
SELECT DATEDIFF(MONTH, 0, '2016/01/21')        --差1392個月
--用1900-01-01加上1392個月
SELECT DATEADD(mm, DATEDIFF(MONTH, 0, '2016/01/21'), 0)    --2016-01-01 00:00:00.000

--求月份的最後一天
SELECT CONVERT(datetime, -1)    --1899-12-31 00:00:00.000
SELECT DATEDIFF(MONTH, -1, '2016/01/21')    --差1393個月
--用1899-12-31加上1393個月
SELECT DATEADD(mm, DATEDIFF(MONTH, -1, '2016/01/21'), -1)    --2016-01-31 00:00:00.000


--寫成Function
CREATE FUNCTION getTheLatestDayOfDate
(
    @sourceDate datetime
)
RETURNS datetime
AS
BEGIN
    DECLARE @resultDate datetime;
    SELECT @resultDate = DATEADD(mm, DATEDIFF(mm, -1, @sourceDate), -1)

    RETURN @resultDate
END
GO
SELECT dbo.getTheLatestDayOfDate(CONVERT(DATETIME,'2016/01/21'))