SqlServer日期函数

select @@DATEFIRST


set DATEFIRST 1
设置每周一第一天是星期几(1-7)

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

当前年的第一天是几号

 

 

select   datepart(week,getdate())
当前年的第几周

 


select DATEDIFF(day,'2007-08-17 22:09:03.890','2007-08-18 22:09:03.890')   返回1


要匹配标准的 12 或 24 小时格式的小时,可以使用下面的表达式:
(([0-1]?[0-9])|([2][0-3])):([0-5][0-9])(:[0-5][0-9])?
 


要匹配 12 小时 AM/PM 格式、带或不带秒数的时间,甚至匹配大写或小写、不带后缀 AM 或 PM 标识符的时间,可以使用下面的表达式:
([^0-9])([0-1]?[0-9]){1}(((:([0-5]){1}([0-9]){1}){1,2})|(( )?([AP]M)|([ap]m)))?

 


--计算两个日期之间相差的工作天数(本算法以2006-9-1至2006-9-30为例说明)
CREATE FUNCTION f_WorkDateDiff
( @dt_begin datetime, ----统计开始日期
@dt_end datetime)----统计结束日期
RETURNS int ----返回相差天数
AS
BEGIN
 /**//*------@workday,工作日;@bz,作开始和结束日期的大小标志位;@dt,作为交换两日期的变量;-----*/
DECLARE @workday int,@i int,@bz bit,@dt datetime
IF @dt_begin>@dt_end ----开始日期大于结束日期,二者交换,且FU值各变量
SELECT @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE ---与上面相反的话,为标志位取另一个数(用标志位,是为下面返回值判断用)
SET @bz=0
SELECT @i=DATEDIFF(Day,@dt_begin,@dt_end)+1, -- 加1包括本天 @workday=@i/7*5,----取出经历多少工作日,以5天计(记住,若是整周倍数,进入下面CIRLCE) ---------------------------------------------------------- ----这一句特别重要,理解这一句,很重要,给@dt_begin从2006-9-29进入CIRLCE
@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
WHILE @dt_begin<=@dt_end
BEGIN
SELECT @workday=CASE
WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5 ----判断开始日期在1:5内
THEN @workday+1
ELSE @workday END,
@dt_begin=@dt_begin+1 ---+1,然后WHILE
END
RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END)---返回值判断 END
GO
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值