{DATEADD与DATEDIF...
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{DATEADD与DATEDIF...
一:所规定的每周第一天
1.1 @@DATEFIRST
返回 SET DATEFIRST 参数的当前值,SET DATEFIRST 参数指明所规定的每周第一天:1 对应星期一,2 对应星期二,依次类推,用 7 对应星期日。
美国英语中默认 7 对应星期日。
1.2 查询当前系统所规定的每周第一天
SELECT @@DATEFIRST AS '1st Day'
1.3 设置当前系统所规定的每周第一天(例子为设置星期日为每周第一天)
SET DATEFIRST 7
二:计算两个日期之间的小时、天、周、月、年等时间间隔总数。
2.1 DATEDIFF
返回跨两个指定日期的日期和时间边界数。
2.2 语法
DATEDIFF ( datepart , startdate , enddate )
2.3 参考
下表列出了 Microsoft? SQL Server? 识别的日期部分和缩写。
日期部分缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
三:计算一个日期通过给时间间隔加减来获得一个新的日期。
3.1 DATEADD
在向指定日期加上一段时间的基础上,返回新的 datetime 值。
3.2 语法
DATEADD ( datepart , number, date )
3.3 参考
下表列出了 Microsoft? SQL Server? 识别的日期部分和缩写。
日期部分缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
四:时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的
五:在Sql Server中时间是精确到3毫秒
六:好用的例子
6.1计算一个月第一天的SQL 脚本:SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
6.2一年的第一天的SQL 脚本:SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
6.3本周的星期一的SQL 脚本:SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
6.4 季度的第一天的SQL 脚本:SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
6.5当天的半夜的SQL 脚本:SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
6.6上个月的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
6.7去年的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
6.8本月的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
6.9 本年的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
6.10本月的第一个星期一的SQL 脚本:select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
七:其他日期处理方法
1)去掉时分秒
declare @ datetime
set @ = getdate() --'2003-7-1 10:00:00'
SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)
2)显示星期几
select datename(weekday,getdate())
3)如何取得某个月的天数
declare @m int
set @m=2 --月份
select datediff(day,'2003-'+cast(@m as varchar)+'-15' ,'2003-'+cast(@m+1 as varchar)+'-15')
另外,取得本月天数
select datediff(day,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate()) as varchar)+'-15' ,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate())+1 as varchar)+'-15') 或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天
SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))
4)判断是否闰年:
SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then '平年' else '闰年' end
或者
select case datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01')) when 28 then '平年' else '闰年' end
5)一个季度多少天
declare @m tinyint,@time smalldatetime
select @m=month(getdate())
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01'
select datediff(day,@time,dateadd(mm,3,@time))。