天天看点

sql中的日期计算 网上搜集

提到SQL中的日期函数与时间函数就不得不说出以下两个概念:确定性函数与非确定性函数。

确定性函数:即获得的值是在一组既定的值中,或者是可以料想到的值。

非确定性函数:即无法准确获知其结果。

下面将日期函数与时间函数按上面提到的这两种类型进行分类说明:

1 . 确定性函数:

[1] DateAdd()

作用:在指定的日期加上一段时间的基础上,返回新的DateTime

语法:

DateAdd(datepart, number, date)

参数:

datepart

是规定应向日期的哪一部分返回新值的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。

number

是用来增加datepart的值,如果指定的不是一个整数,则将舍弃此值的小数部分。

例如,如果为datepart指定day,为number指定1.75,则day将增加1。

date

是返回DateTime类型或SmallDateTime值或日期格式字符串的表达式。

返回值类型:

返回DateTime,如果date参数是SmallDateTime,返回SmallDateTime。

示例:

此示例打印出当前时间加上21天,

DateAdd(day, 21, GetDate())

number传负数,大于本月剩余天数的值都是可以的,函数会自己演算。

[2] DateDiff()

作用:

返回跨两个指定日期的日期和时间边界数。

DateDiff(datepart, startDate, endDate)

DateAdd()中以对此参数进行了介绍,这里不再赘述,后面的datepart参数也同。

startDate

是计算的开始日期,startDate是返回DateTime或SmallDateTime值或日期格式字符串的表达式。

因为SmallDateTime只精确到分钟,所以当用SmallDateTime时,秒和毫秒总是0。

endDate

是计算的总是日期。endDate是返回DateTime或SmallDateTime值或日期格式字符串的表达式。

int

解释:

startDate是从endDate减去。如果startDate比endDate玩,返回负值。

当超出整数值范围,DateDiff产生错误。

对于毫秒,最大数是24天20小时31分钟零23.647秒。

对于秒,最大数是68年。

计算跨分钟、秒和毫秒这些边界的方法,使得DateDiff给出的结果在全部数据类型中是一致的。

结果是带正负号的整数值,其等于跨第一个和第二个日期间的datepart边界值。

例如,在1月4日(星期日)和1月11日(星期日)之间的星期数是1。

select DateDiff(day, '2009-10-24', GetDate())

[3] Day()

返回代表指定日期的天的日期部分整数。

Day(date)

类型为DateTime或SmallDateTime的表达式。

此函数等价于DatePart(dd, date)

下面的示例从2009-10-4中返回day部分

select Day('2009-10-4')

会得到4,即日期部分

[4] Month()

返回代表指定日期月份的整数。

Month(date)

返回DateTime或SmallDateTime值或日期格式字符串的表达式。

此函数等价于等价于DatePart(mm, date)

下面的示例从2009-10-4中返回month部分

select Month('2009-10-4')

会获得10,即月份部分

[5] Year()

返回表示指定日期中的年份的整数。

Year(date)

DateTime或SmallDateTime类型的表达式。

此函数等价于DatePart(yy, date)

下例从日期2009-10-4中返回年分数

select Year('2009-10-4')

获得2009,即年份部分

2 . 非确定性函数:

[1] DateName()

返回代表指定日期的制定日期部分的字符串。

DateName(datepart, date)

同DateAdd()

nvarchar

SQL Server自动在字符和DateTime值间按需求进行交换,例如,当字符与DateTime值进行比较时。

此示例从GetDate返回的日期中提取月份名,

select DateName(month, GetDate())

获得October

[2] GetDate()

按DateTime值的 Microsoft® SQL Server™ 标准内部格式返回当前系统日期和时间。

GetDate()

DateTime

日期函数可以用在select语句的选择列表或用在查询的where子句中,

在设计报表时,GetDate函数可用于在每次生成报表时打印当前日期和时间。

GetDate对于跟踪活动也很有用,诸如在记录事务在某一账户上发生的时间。

A. 用GetDate返回当前日期和日期和时间

下面的示例得出当前系统日期和时间:

select GetDate()

B. 在create table语句中使用GetDate

下面的示例创建Employees表并用GetDate给出员工雇佣时间的默认值。

use Test

go

create table Employees (

)

[3] GetUtcDate()

返回表示当前UTC时间(世界时间坐标或称格林威治标准时间)的DateTime值。

当前的UTC时间得自当前的本地时间和运行SQL Server的计算机操作系统中的设置。

GetUtcDate()

GetUtcDate是非确定性函数。引用该列的视图和表达式无法进行索引。

GetUtcDate无法在用户定义的函数内使用。

最后的这个比较特别,它是DatePart()

除了用作DatePart(dw, date)外都具有确定性。

dw是工作日的日期部分。

返回代表指定日期的指定日期部分的函数。

DatePart(datepart, date)

这里多了个weekday(dw),返回对应于星期中某天的数,

例如,Sunday = 1,Saturday = 7。

weekday日期部分产生的数取决于set datefirst设定的值,此命令设定星期中的第一天。

是返回DateTime或SmallDateTime值或日期格式字符串的表达式。

Day、Month和Year函数分别等价于DatePart(dd, date)、DatePart(mm, date)和DatePart(yy, date)

GetDate函数返回当前日期,然而,比较时并不总是需要完整的日期信息,通常只是对日期的一部分进行比较。

select DatePart(mm, GetDate()) as 'Month Num'

获得10