sql获取日期区间(年、月、周、日)


通过存储过程获取当前日期(或指定日期)所在的日期区间,包含年、月、周、日。

CREATE PROCEDURE [dbo].[GetDataPeriod]
    @defaultDate DATE=NULL,
    @period VARCHAR(1)=NULL,
    @startDate DATE OUTPUT,
    @endData DATE OUTPUT
AS
BEGIN
    IF    @defaultDate IS NULL
    BEGIN
        SET @defaultDate=GETDATE();
    END
    IF    @period IS NULL
    BEGIN
        SET @period='M';
    END
    --第一天
    SELECT @startDate=
        CASE @period
        WHEN 'Y' THEN DATEADD(YEAR, DATEDIFF(YEAR,0,@defaultDate), 0)
        WHEN 'M' THEN DATEADD(MONTH, DATEDIFF(MONTH,0,@defaultDate), 0)
        WHEN 'W' THEN DATEADD(WEEK, DATEDIFF(WEEK,0,@defaultDate), 0)
        WHEN 'D' THEN DATEADD(DAY, DATEDIFF(DAY,0,@defaultDate), 0)
        END;
    IF @defaultDate<@startDate
    BEGIN
        SET @defaultDate=DATEADD(DAY,-1,@defaultDate);
        EXEC dbo.GetDataPeriod @defaultDate,@period,@startDate OUTPUT,@endData OUTPUT;
    END
    ELSE
    BEGIN
    --最后一天
    SELECT @endData=
        CASE @period
        WHEN 'Y' THEN DATEADD(DAY,-1,DATEADD(YEAR,1,DATEADD(YEAR, DATEDIFF(YEAR,0,@defaultDate), 0)))
        WHEN 'M' THEN DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(MONTH, DATEDIFF(MONTH,0,@defaultDate), 0)))
        WHEN 'W' THEN DATEADD(DAY,-1,DATEADD(WEEK,1,DATEADD(WEEK, DATEDIFF(WEEK,0,@defaultDate), 0)))
        WHEN 'D' THEN DATEADD(DAY, DATEDIFF(DAY,0,@defaultDate), 0)
        END;
    END
END

使用实例

DECLARE @startDate DATE,
    @endData DATE;
EXEC dbo.GetDataPeriod @defaultDate = '2017-06-20',
    @period = 'Y',
    @startDate = @startDate OUTPUT,
    @endData = @endData OUTPUT
SELECT @startDate,@endData;--// 2017-01-01 2017-12-31
 
EXEC dbo.GetDataPeriod @defaultDate = '2017-06-20',
    @period = 'M',
    @startDate = @startDate OUTPUT,
    @endData = @endData OUTPUT
SELECT @startDate,@endData;--// 2017-06-01 2017-06-30
 
EXEC dbo.GetDataPeriod @defaultDate = '2017-06-20',
    @period = 'W',
    @startDate = @startDate OUTPUT,
    @endData = @endData OUTPUT
SELECT @startDate,@endData;--// 2017-06-19 2017-06-25
 
EXEC dbo.GetDataPeriod @defaultDate = '2017-06-20',
    @period = 'D',
    @startDate = @startDate OUTPUT,
    @endData = @endData OUTPUT
SELECT @startDate,@endData;--// 2017-06-20 2017-06-20


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM