微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深入透析SQL中的日期函数与时间函数

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

确定性函数:即获得的值是在一组既定的值中,或者是可以料想到的值。
非确定性函数:即无法准确获知其结果。

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

1. 确定性函数
[1] DateAdd()
作用:在指定的日期加上一段时间的基础上,返回新的DateTime

语法:
DateAdd(datepart,number,date)

参数:
datepart

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



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)

参数:
datepart
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)

参数:
date
类型为DateTime或SmallDateTime的表达式。

返回值类型:
int

解释:
函数等价于DatePart(dd,date)

示例:
下面的示例从2009-10-4中返回day部分
select Day('2009-10-4')
会得到4,即日期部分

[4] Month()
作用:
返回代表指定日期月份的整数。

语法:
Month(date)

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

返回值类型:
int

解释:
函数等价于等价于DatePart(mm,date)

示例:
下面的示例从2009-10-4中返回month部分
select Month('2009-10-4')
会获得10,即月份部分

[5] Year()
作用:
返回表示指定日期中的年份的整数。

语法:
Year(date)

参数:
date
DateTime或SmallDateTime类型的表达式。

返回值类型:
int

解释:
函数等价于DatePart(yy,date)

示例:
下例从日期2009-10-4中返回年分数
select Year('2009-10-4')
获得2009,即年份部分

2. 非确定性函数
[1] DateName()
作用:
返回代表指定日期的制定日期部分的字符串。

语法:
DateName(datepart,date)

参数:
datepart
同DateAdd()

返回值类型:
nvarchar

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

示例:
此示例从GetDate返回的日期中提取月份名,
select DateName(month,GetDate())
获得October

[2] GetDate()
作用:
按DateTime值的 Microsoft® sql Server&Trade; 标准内部格式返回当前系统日期和时间。

语法:
GetDate()

返回值类型:
DateTime

解释:
日期函数可以用在select语句的选择列表或用在查询的where子句中,
在设计报表时,GetDate函数可用于在每次生成报表时打印当前日期和时间。
GetDate对于跟踪活动也很有用,诸如在记录事务在某一账户上发生的时间。

示例:
A. 用GetDate返回当前日期和日期和时间
下面的示例得出当前系统日期和时间:
select GetDate()

B. 在create table语句中使用GetDate
下面的示例创建Employees表并用GetDate给出员工雇佣时间的认值。
use Test
go

create table Employees (
      id int identity(1,1),
      empName varchar(40) not null,
      createDtm DateTime default GetDate()
)
go

[3] GetUtcDate()
作用:
返回表示当前UTC时间(世界时间坐标或称格林威治标准时间)的DateTime值。
当前的UTC时间得自当前的本地时间和运行sql Server的计算机操作系统中的设置。

语法:
GetUtcDate()

返回值类型:
DateTime

解释:
GetUtcDate是非确定性函数。引用该列的视图和表达式无法进行索引。
GetUtcDate无法在用户定义的函数内使用。

最后的这个比较特别,它是DatePart()
除了用作DatePart(dw,date)外都具有确定性。
dw是工作日的日期部分。

作用:
返回代表指定日期的指定日期部分的函数

语法:
DatePart(datepart,date)

参数:
datepart
这里多了个weekday(dw),返回对应于星期中某天的数,
例如,Sunday = 1,Saturday = 7。
weekday日期部分产生的数取决于set datefirst设定的值,此命令设定星期中的第一天。

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

返回值类型:
int

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

示例:
GetDate函数返回当前日期,然而,比较时并不总是需要完整的日期信息,通常只是对日期的一部分进行比较。
select DatePart(mm,GetDate()) as 'Month Num'
go
获得10

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐