zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    POJ3213(矩阵乘法)
    jquery:ajax不接收返回值回
    Swift UI学习UITableView and protocol use
    也可以看看GCD(杭州电2504)(gcd)
    数据结构—队列
    HDU 4946 Area of Mushroom 凸包
    UVa 353
    照片教你eclipse通过使用gradle 打包Android
    普林斯顿大学公开课 算法1-8:并检查集合 高速查找
    Codeforces Round #246 (Div. 2)
  • 原文地址:https://www.cnblogs.com/ArtlessBruin/p/7125681.html
Copyright © 2011-2022 走看看