正确使用SQL Server的datetime函数:GETDATE、DATENAME和DATEPART(二)

日期: 2009-02-04 作者:Robert Sheldon翻译:曾少宁 来源:TechTarget中国 英文

检索date/time值各部分 与YEAR、MONTH和DAY函数相似,DATEPART函数返回一个代表date/time值的指定部分的整数值。比如,下面的SELECT语句返回与上面的例子一样的结果: SELECT DATEPART(yy, PostTime) AS [Year],  DATEPART(mm, PostTime) AS [Month],  DATEPART(dd, PostTime) AS [Day]  FROM DatabaseLog W……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

检索date/time值各部分

与YEAR、MONTH和DAY函数相似,DATEPART函数返回一个代表date/time值的指定部分的整数值。比如,下面的SELECT语句返回与上面的例子一样的结果:


SELECT DATEPART(yy, PostTime) AS [Year], 
DATEPART(mm, PostTime) AS [Month], 
DATEPART(dd, PostTime) AS [Day] 
FROM DatabaseLog
WHERE DatabaseLogID = 1 

首先要注意的是,当调用DATEPART时,需要指定两个参数。第一个参数确认检索的date/time值的组成部分,而第二个参数是一个源字段。对于第一个参数,你必须使用一个支持的缩写来指定时间部分。下面的表格列举了你可以检索的日期/时间部分以及你必须用来检索这些部分的缩写:

Date/time part

Abbreviations

year

yy, yyyy

quarter

qq, q

month

mm, m

day of year

dy, y

day

dd, d

week

wk, ww

weekday

dw

hour

hh

minute

mi, n

second

ss, s

millisecond

ms

有些datetime部分有多个缩写支持。比如,你可以使用“YY”或“YYY”作为第一个DATEPART参数来检索date/time值中的年。注意,表格不仅仅包含年、月或日的缩写。换言之,你还可以检索季度、一年中特定的一天、一年中特定的一周以及工作日,如下面的SELECT语句所示:


SELECT DATEPART(qq, PostTime) AS [Quarter], 
DATEPART(dy, PostTime) AS [DayOfYear], 
DATEPART(wk, PostTime) AS [Week], 
DATEPART(dw, PostTime) AS [Weekday] 
FROM DatabaseLog
WHERE DatabaseLogID = 1

正如前面的例子所显示的,每一个DATEPART实例都包含两个参数:date/time部分的缩写和源字段。语句返回如下的结果:

Quarter

DayOfYear

Week

Weekday

4

287

42

6

注意,工作日显示为6。默认情况下,SQL Server的每周是从星期天开始的,因此,工作日6等同于星期五。

上面的两个例子仅仅检索与日期相关的值。但是,正如下面的表格所显示的,你也可以检索其它与时间相关的数据:


SELECT DATEPART(hh, PostTime) AS [Hour], 
DATEPART(mi, PostTime) AS [Minute], 
DATEPART(ss, PostTime) AS [Second], 
DATEPART(ms, PostTime) AS [Millisecond] 
FROM DatabaseLog
WHERE DatabaseLogID = 1 

在这种情况下,该语句是检索小时、分、秒和毫秒,结果显示如下:

DATEPART函数的主要的局限是它返回的只是整数,这就是为什么星期五是以6显示的。然而,如果你想要显示实际的日和月名称,你可以使用DATENAME函数。DATENAME函数与DATEPART函数的运作完全一样。DATENAME使用同样数目的参数并支持同样的缩写。比如,如果你检索年、月和日,那么你只需简单地用DATENAME取代DATEPART就可以得到正如你在前面的例子中所看到的结果:


SELECT DATENAME(yy, PostTime) AS [Year], 
DATENAME(mm, PostTime) AS [Month], 
DATENAME(dd, PostTime) AS [Day] 
FROM DatabaseLog
WHERE DatabaseLogID = 1 

这样,你将得到下面的结果:

Year

Month

Day

2005

October

14

月的值现在是October而不是10。但是,由于只有一种方式来代表它们,因此,年和日依然是整数。你也可以在其它的日期/时间组件上使用DATENAME函数,如下所示:


SELECT DATENAME(qq, PostTime) AS [Quarter], 
DATENAME(dy, PostTime) AS [DayOfYear], 
DATENAME(wk, PostTime) AS [Week], 
DATENAME(dw, PostTime) AS [Weekday] 
FROM DatabaseLog
WHERE DatabaseLogID = 1 

再次,我用DATENAME取代DATEPART,但是保留其它的不改变。语句返回了以下的结果。

Quarter

DayOfYear

Week

Weekday

4

287

42

Friday

注意,季度、一年中第几天和第几周仍然是整数,但是工作日现在是Friday而不是6。你也可以使用DATENAME来检索一个date/time值的时间组件,但是结果将如你所想的那样,仍然是整数。

这就是DATEPART和DATENAME函数以及其它用来检索日期/时间值的函数。你可以单独或者混合着使用这些函数来关联值。我建议你尝试着使用这些函数以便更好地了解它们是如何工作的。在以后的技巧中(第四部分),我将阐述如何在这些值上执行运算以便添加数据和确定日期范围。同时,你也可以在Microsoft SQL Server Books Online上面获得各个函数的更多的信息和例子。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐