这两天写一个和统计数据有关的存储过程,里面要利用日期进行一些计算和判断,也自然要利用SQL的一些日期相关的函数。这里略记一下,当是复习一下SQL。
利用SQL脚本内置的几个函数,我们能灵活的对日期进行计算和比较。常用的几个函数:GETDATE(),DATEDIFF(),DATEADD()
GETDATE() 当然顾名思义,得到当前的日期,返回类型是DateTime类型。
DATEDIFF ( datepart , startdate , enddate ) 用于判断在两个日期之间存在的指定时间间隔的数目。
第一个参数是指定时间间隔的类型,例如mm(月),dd(天),yy(年),ms(毫秒),ss(秒),不同的间隔类型,返回的结果也不一样。
DATEADD (datepart , number, date ) 用于日期运算的函数,将传入的日期,加上指定时间间隔数目的日期。
例如,计算得到本年的第一天:
Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
我们来分析下这个SQL语句就可以知道,首先从最里面的getdate()开始,getdate()得到当前日期和时间,外层的datediff,计算当前日期和1900-01-01 00:00:00之间的时间间隔,返回单位是以年来统计的,如果我们分开看DATEDIFF(yy,0,getdate()),0)的结果,返回就是:109。返回的109,传递给最外层的DATEADD函数,将1900-01-01 00:00:00加上109年,得到的结果,自然就是2009-01-01 00:00:00了,也即本年的第一天。
同样,灵活的利用这几个函数的组合,我们可以得到不同的结果:
得到当月的第一天:Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
得到当前季度的第一天:Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
得到当天的起始时间: Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
得到上个月最后一天: Select DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
得到上个月的第一天: Select DATEADD(m,-1,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
其原理就是得到当月第一天,再减去三毫秒(SQL的时间以3毫秒为一个单位),这样以当前为2月,得到的结果就是:2009-01-31 23:59:59.997
得到去年的最后一天: Select DATEADD(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
得到本月的最后一天: Select DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
得到本年的最后一天: Select DATEADD(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
得到本月的第一个星期一: Select DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd,6-datepart(day,getdate()),getdate())), 0)






1985.11.20Windows1.01 —— 最早的“蓝屏”
1987.11.1 Windows 2.03 ——微软标识成形
1990.5.22 Windows 3.0
1992.3.18 Windows 3.1 —— 首次出现窗口旗帜
1993.11.1 Windows for Workgroups 3.11
1993.7.27 Windows NT 3.1
1993.7.27 Windows NT 3.1 AdvancedServer
1994.9.21 Windows NT Workstation 3.5
1995.5.30 Windows NT Workstation 3.51
1995.5.30 Windows NT Server 3.51
1995.8.24 Windows 95 ——“蓝天白云”并突出显示了集成的IE浏览器
1996.8.24 Windows NT Workstation 4.0
1996.8.24 Windows NT Server 4.0
1998.6.25 Windows 98
2000.2.17 Windows 2000 Professional —— 第一次使用进度条
2000.9.14 Windows Millennium Edition
2001.10.25 Windows XP Home Edition —— 进度条改成了循环滚动样式
2001.10.25 Windows XP Professional Edition
2003.3.28 Windows XP 64-Bit Edition
2003.4.24 Windows Server 2003
2004.8.6 Windows XP SP2 —— Professional字样被去掉
2007.1.30Windows Vista—— 改用黑屏
2007.1.30 Windows Vista —— 第二部分,看来微软不过瘾,非要在Vista里加上两个启动画面。







