• Sql Server 几个时间计算方法


    下面的参数都是传入一个日期,试验时可用GETDATE()

    1、求当月第一天

    select @DATE-DAY(@DATE)+1

    2、求下月第一天

    select DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)

    就是在当月第一天的基础上+1月

    3、求当月最后一天

    select DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1

    就是在下月第一天的基础上-1天

    4、求当月的天数

    select DAY(DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1)

    就是对当月最后一天进行day运算

    5、求当月的所有日期

    SELECT DATEADD(DAY,NUMBER,@DATE-DAY(@DATE)+1) AS DAT
    FROM MASTER..SPT_VALUES
    WHERE TYPE='P' AND DAY(DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1)>NUMBER

    下面还有,省略了。

    6、求当月的第几周

    SELECT DATEPART(WEEK,@DATE)-DATEPART(WEEK,@DATE-DAY(@DATE)+1)+1

    网上找的是一个很复杂的算法,如下:

    SELECT DATEPART(WEEK,DAT)-DATEPART(WEEK,@DATE-DAY(@DATE)+1)+1
    FROM (
    SELECT DATEADD(DAY,NUMBER,@DATE-DAY(@DATE)+1) AS DAT
    FROM MASTER..SPT_VALUES
    WHERE TYPE='P' AND DAY(DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1)>NUMBER
    ) T
    WHERE DAT=@DATE

    其实和上面那个是等效的,这太搞笑了吧?算这么久,其实就想给它传个当天的参数?

    好吧,网上找的一个算指定日期在当月是第几周的算法如下:

    CREATE FUNCTION  [dbo].[fn_getWkOfMonth](@DATE_Param DATETIME)
    RETURNS int
    AS
    begin

    DECLARE @DATE DATETIME
    DECLARE @wkOfMonth int
    SET @DATE=@DATE_Param
    set @wkOfMonth=(SELECT DATEPART(WEEK,DAT)-DATEPART(WEEK,@DATE-DAY(@DATE)+1)+1
    FROM (
    SELECT DATEADD(DAY,NUMBER,@DATE-DAY(@DATE)+1) AS DAT
    FROM MASTER..SPT_VALUES
    WHERE TYPE='P' AND DAY(DATEADD(MONTH,1,@DATE-DAY(@DATE)+1)-1)>NUMBER
    ) T
    WHERE DAT=@DATE)
    return @wkOfMonth
    end

    GO

    把它换成下面这个敢不敢?

    CREATE FUNCTION  [dbo].[fn_getWkOfMonth2](@DATE_Param DATETIME)
    RETURNS int
    AS
    begin

    DECLARE @DATE DATETIME
    DECLARE @wkOfMonth int
    SET @DATE=@DATE_Param
    set @wkOfMonth=(DATEPART(WEEK,@DATE)-DATEPART(WEEK,@DATE-DAY(@DATE)+1)+1)
    return @wkOfMonth
    end

    GO




  • 相关阅读:
    LeetCode 48 Anagrams
    大数据实时处理:百分点实时计算架构和算法
    Kafka操作
    Kafka
    批量扫描互联网无线路由设备telnet,并获取WIFI密码
    WMI
    openvas
    原始套接字
    Zabbix
    MySQL exist
  • 原文地址:https://www.cnblogs.com/thinkCoding/p/2267354.html
Copyright © 2020-2023  润新知