程序员人生 网站导航

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

栏目:Sqlserver时间:2014-01-17 22:59:55
提到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)

参数:
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™ 标准内部格式返回当前系统日期和时间。

语法:
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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐