实例讲解MSSQL⽇期相加减⽐⼤⼩函数转
1. 当前系统⽇期、时间
select getdate()
2. dateadd 在向指定⽇期加上⼀段时间的基础上,返回新的 datetime 值
例如:向⽇期加上2天
select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000
3. datediff 返回跨两个指定⽇期的⽇期和时间边界数。
select datediff(day,'2004-09-01','2004-09-18') --返回:17
4. datepart 返回代表指定⽇期的指定⽇期部分的整数。
SELECT DATEPART(month, '2004-10-15') --返回 10
5. datename 返回代表指定⽇期的指定⽇期部分的字符串
SELECT datename(weekday, '2004-10-15') --返回:星期五
6. day(), month(),year() --可以与datepart对照⼀下
select 当前⽇期=convert(varchar(10),getdate(),120)
,当前时间=convert(varchar(8),getdate(),114)
select datename(dw,'2004-10-15')
select 本年第多少周=datename(week,'2004-10-15')
,今天是周⼏=datename(weekday,'2004-10-15')
函数参数/功能
GetDate( ) 返回系统⽬前的⽇期与时间
DateDiff (interval,date1,date2)
以interval 指定的⽅式,返回date2 与date1两个⽇期之间的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的⽅式,加上number之后的⽇期
日期转字符串函数
DatePart (interval,date) 返回⽇期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回⽇期date中,interval指定部分所对应的字符串名称
参数 interval的设定值如下:
值缩写(Sql Server) Access 和 ASP 说明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m ⽉1 ~ 12
Day of year Dy y ⼀年的⽇数,⼀年中的第⼏⽇ 1-366
Day Dd d ⽇,1-31
Weekday Dw w ⼀周的⽇数,⼀周中的第⼏⽇ 1-7
Week Wk ww 周,⼀年中的第⼏周 0 ~ 51
Hour Hh h 时0 ~ 23
Minute Mi n 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999
access 和 asp 中⽤date()和now()取得系统⽇期时间;其中DateDiff,DateAdd,DatePart也同是能⽤于Access和asp中,这些函数的⽤法也类似
举例:
1.GetDate() ⽤于sql server :select GetDate()
2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天
3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期⼀(周⽇为1,周六为7)
DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
DatePart('y','2005-7-25 22:56:32')返回值为 206即这⼀年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年
SQL Server DATEPART() 函数返回 SQLServer datetime 字段的⼀部分。
SQL Server DATEPART() 函数的语法是:
DATEPART(portion, datetime)
其中 datetime 是 SQLServer datetime 字段和部分的名称是下列之⼀: Ms for Milliseconds
Yy for Year
Qq for Quarter of the Year
Mm for Month
Dy for the Day of the Year
Dd for Day of the Month
Wk for Week
Dw for the Day of the Week
Hh for Hour
Mi for Minute
Ss for Second
详细的说明:
通常,你需要获得当前⽇期和计算⼀些其他的⽇期,例如,你的程序可能需要判断⼀个⽉的第⼀天或者最后⼀天。你们⼤部分⼈⼤概都知道怎样把⽇期进⾏分割(年、⽉、⽇等),然后仅仅⽤分割出来的年、⽉、⽇等放在⼏个函数中计算出⾃⼰所需要的⽇期!在这篇⽂章⾥,我将告诉你如何使⽤DATEADD和 DATEDIFF函数来计算出在你的程序中可能你要⽤到的⼀些不同⽇期。
在使⽤本⽂中的例⼦之前,你必须注意以下的问题。⼤部分可能不是所有例⼦在不同的机器上执⾏的结
果可能不⼀样,这完全由哪⼀天是⼀个星期的第⼀天这个设置决定。第⼀天(DATEFIRST)设定决定了你的系统使⽤哪⼀天作为⼀周的第⼀天。所有以下的例⼦都是以星期天作为⼀周的第⼀天来建⽴,也就是第⼀天设置为7。假如你的第⼀天设置不⼀样,你可能需要调整这些例⼦,使它和不同的第⼀天设置相符合。你可以通过@@DATEFIRST函数来检查第⼀天设置。
为了理解这些例⼦,我们先复习⼀下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个⽇期之间的⼩时、天、周、⽉、年等时间间隔总数。 DATEADD函数计算⼀个⽇期通过给时间间隔加减来获得⼀个新的⽇期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。
使⽤DATEDIFF和DATEADD函数来计算⽇期,和本来从当前⽇期转换到你需要的⽇期的考虑⽅法有点不同。你必须从时间间隔这个⽅⾯来考虑。⽐如,从当前⽇期到你要得到的⽇期之间有多少时间间隔,或者,从今天到某⼀天(⽐如1900-1-1)之间有多少时间间隔,等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的⽇期计算例⼦。
⼀个⽉的第⼀天
第⼀个例⼦,我将告诉你如何从当前⽇期去这个⽉的最后⼀天。请注意:这个例⼦以及这篇⽂章中的其他例⼦都将只使⽤DATEDIFF和DATEADD函数来计算我们想要的⽇期。每⼀个例⼦都将通过计算但前的时间间隔,然后进⾏加减来得到想要计算的⽇期。
这是计算⼀个⽉第⼀天的SQL 脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
我们把这个语句分开来看看它是如何⼯作的。最核⼼的函数是getdate(),⼤部分⼈都知道这个是返回当前的⽇期和时间的函数。下⼀个执⾏的函数 DATEDIFF(mm,0,getdate())是计算当前⽇期和“1900-01-01 00:00:00.000”这个⽇期之间的⽉数。记住:时期和时间变量和毫秒⼀样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第⼀个时间表达式为“0”。下⼀个函数是DATEADD,增加当前⽇期到“1900-01-01”的⽉数。通过增加预定义的⽇期“1900-01-01”和当前⽇期的⽉数,我们可以获得这个⽉的第⼀天。另外,计算出来的⽇期的时间部分将会是“00:00:00.000”。
这个计算的技巧是先计算当前⽇期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的⽇期,这个技巧可以⽤来计算很多不同的⽇期。下⼀个例⼦也是⽤这个技巧从当前⽇期来产⽣不同的⽇期。
本周的星期⼀
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
⼀年的第⼀天
现在⽤年(yy)的时间间隔来显⽰这⼀年的第⼀天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
季度的第⼀天
假如你要计算这个季度的第⼀天,这个例⼦告诉你该如何做。
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
深⼊DATEDIFF和DATEADD函数计算
上个⽉的最后⼀天
这是⼀个计算上个⽉最后⼀天的例⼦。它通过从⼀个⽉的最后⼀天这个例⼦上减去3毫秒来获得。有⼀
点要记住,在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的⽇期和时间。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
计算出来的⽇期的时间部分包含了⼀个Sql Server可以记录的⼀天的最后时刻(“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)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。