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




转载于:https://www.cnblogs.com/thinkCoding/archive/2011/11/29/2267354.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值