您的位置:首页 > 数据库

SQL內置Function--日期和时间函数

2006-11-10 14:42 363 查看
日期和时间函数
这些标量函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。

下表列出日期和时间函数以及它们的确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

函数

确定性

DATEADD

具有确定性

DATEDIFF

具有确定性

DATENAME

不具有确定性

DATEPART

除了用作DATEPART(dw,date)外都具有确定性。dw是工作日的日期部分,取决于由设置每周第一天的SETDATEFIRST所设置的值。

DAY

具有确定性

GETDATE

不具有确定性

GETUTCDATE

不具有确定性

MONTH

具有确定性

YEAR

具有确定性

===========

1DATEADD

在向指定日期加上一段时间的基础上,返回新的datetime值。

语法
DATEADD(datepart,number,date)

参数
datepart

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

日期部分

缩写

Year

yy,yyyy

quarter

qq,q

Month

mm,m

dayofyear

dy,y

Day

dd,d

Week

wk,ww

Hour

hh

minute

mi,n

second

ss,s

millisecond

ms

number

是用来增加datepart的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为datepart指定day,为number指定1.75,则date将增加1。

date

是返回datetime或smalldatetime值或日期格式字符串的表达式。有关指定日期的更多信息,请参见datetime和smalldatetime。

如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果twodigityearcutoff为2049(默认),则49被解释为2049,2050被解释为1950。为避免模糊,请使用四位数的年份。

返回类型
返回datetime,但如果date参数是smalldatetime,返回smalldatetime。

示例
此示例打印出pubs数据库中标题的时间结构的列表。此时间结构表示当前发布日期加上21天。

USEpubs

GO

SELECTDATEADD(day,21,pubdate)AStimeframe

FROMtitles

GO

下面是结果集:

timeframe

---------------------------

Jul3199112:00AM

Jun30199112:00AM

Jul21199112:00AM

Jul13199112:00AM

Jun30199112:00AM

Jul9199112:00AM

Mar1419975:09PM

Jul21199112:00AM

Jul3199412:00AM

Mar1419975:09PM

Nov11199112:00AM

Jul6199112:00AM

Oct26199112:00AM

Jul3199112:00AM

Jul3199112:00AM

Nov11199112:00AM

Jul3199112:00AM

Jul3199112:00AM


(18row(s)affected)


2DATEDIFF

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

语法
DATEDIFF(datepart,startdate,enddate)

参数
datepart

是规定了应在日期的哪一部分计算差额的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。

日期部分

缩写

year

yy,yyyy

quarter

qq,q

Month

mm,m

dayofyear

dy,y

Day

dd,d

Week

wk,ww

Hour

hh

minute

mi,n

second

ss,s

millisecond

ms

startdate

是计算的开始日期。startdate是返回datetime或smalldatetime值或日期格式字符串的表达式。

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

如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果twodigityearcutoff为2049(默认),则49被解释为2049,2050被解释为1950。为避免模糊,请使用四位数的年份。

有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见datetime和smalldatetime。

enddate

是计算的终止日期。enddate是返回datetime或smalldatetime值或日期格式字符串的表达式。

返回类型
integer

注释
startdate是从enddate减去。如果startdate比enddate晚,返回负值。

当结果超出整数值范围,DATEDIFF产生错误。对于毫秒,最大数是24天20小时31分钟零23.647秒。对于秒,最大数是68年。

计算跨分钟、秒和毫秒这些边界的方法,使得DATEDIFF给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的datepart边界数。例如,在1月4日(星期日)和1月11日(星期日)之间的星期数是1。

示例
此示例确定在pubs数据库中标题发布日期和当前日期间的天数。

USEpubs

GO

SELECTDATEDIFF(day,pubdate,getdate())ASno_of_days

FROMtitles


GO


3DATENAME

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

语法
DATENAME(datepart,date)

参数
datepart

是指定应返回的日期部分的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。

日期部分

缩写

year

yy,yyyy

quarter

qq,q

month

mm,m

dayofyear

dy,y

day

dd,d

week

wk,ww

weekday

dw

Hour

hh

minute

mi,n

second

ss,s

millisecond

ms

weekday(dw)日期部分返回星期几(星期天、星期一等)。

是返回datetime或smalldatetime值或日期格式字符串的表达式。对1753年1月1日之后的日期用datetime数据类型。更早的日期存储为字符数据。当输入datetime值时,始终将其放入引号中。因为smalldatetime只精确到分钟,所以当用smalldatetime值时,秒和毫秒总是0。有关指定日期的更多信息,请参见datetime和smalldatetime。有关时间值指定的更多信息,请参见时间格式。

如果只指定年份的最后两位数字,则小于或等于twodigityearcutoff配置选项的值的最后两位数字的值所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果twodigityearcutoff为2050(默认),则49被解释为2049,50被解释为1950。为避免模糊,请使用四位数字的年份。

返回类型
nvarchar

注释
SQLServer自动在字符和datetime值间按需要进行转换,例如,当将字符值与datetime值进行比较时。

示例
此示例从GETDATE返回的日期中提取月份名。

SELECTDATENAME(month,getdate())AS'MonthName'

下面是结果集:

MonthName

------------------------------


February


4DATEPART

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

语法
DATEPART(datepart,date)

参数
datepart

是指定应返回的日期部分的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。

日期部分

缩写

year

yy,yyyy

quarter

qq,q

month

mm,m

dayofyear

dy,y

day

dd,d

week

wk,ww

weekday

dw

Hour

hh

minute

mi,n

second

ss,s

millisecond

ms

week(wk,ww)日期部分反映对SETDATEFIRST作的更改。任何一年的1月1日定义了week日期部分的开始数字,例如:DATEPART(wk,'Jan1,xxxx')=1,此处xxxx代表任一年。

weekday(dw)日期部分返回对应于星期中的某天的数,例如:Sunday=1、Saturday=7。weekday日期部分产生的数取决于SETDATEFIRST设定的值,此命令设定星期中的第一天。

date

是返回datetime或smalldatetime值或日期格式字符串的表达式。对1753年1月1日之后的日期用datetime数据类型。更早的日期存储为字符数据。当输入datetime值时,始终将其放入引号中。因为smalldatetime只精确到分钟,所以当用smalldatetime值时,秒和毫秒总是0。

如果只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果twodigityearcutoff为2049(默认),则49被解释为2049,2050被解释为1950。为避免模糊,请使用四位数的年份。

有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见datetime和smalldatetime。

返回类型
int

注释
DAY、MONTH、和YEAR函数分别是DATEPART(dd,date)、DATEPART(mm,date)、和DATEPART(yy,date)的同义词。

示例
GETDATE函数返回当前日期;然而,比较时并不总是需要完整的日期信息(通常只是对日期的一部分进行比较)。此示例显示GETDATE及DATEPART的输出。

SELECTGETDATE()AS'CurrentDate'

GO

下面是结果集:

CurrentDate

---------------------------

Feb18199811:46PM


SELECTDATEPART(month,GETDATE())AS'MonthNumber'

GO

下面是结果集:

MonthNumber

------------

2

此示例假设日期是5月29日。

SELECTDATEPART(month,GETDATE())

GO

下面是结果集:

-----------

5


(1row(s)affected)

在此示例中,以数字表示日期。注意:SQLServer将0解释为01/01/1900。

SELECTDATEPART(m,0),DATEPART(d,0),DATEPART(yy,0)

下面是结果集:

-----------------


111900


5DAY

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

语法
DAY(date)

参数
date

类型为datetime或smalldatetime的表达式。

返回类型
int

注释
此函数等价于DATEPART(dd,date)。

示例
此示例返回从日期03/12/1998后的天数。

SELECTDAY('03/12/1998')AS'DayNumber'

GO

下面是结果集:

DayNumber

------------

12

在此示例中,以数字表示日期。注意:Microsoft®SQLServer™将0解释为01/01/1900。

SELECTMONTH(0),DAY(0),YEAR(0)

下面是结果集。

-----------------


111900


6GETDATE

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

语法
GETDATE()

返回类型
datetime

注释
日期函数可用在SELECT语句的选择列表或用在查询的WHERE子句中。

在设计报表时,GETDATE函数可用于在每次生成报表时打印当前日期和时间。GETDATE对于跟踪活动也很有用,诸如记录事务在某一帐户上发生的时间。

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

SELECTGETDATE()

GO

下面是结果集:

-------------------------

July2919982:50PM


(1row(s)affected)

B.在CREATETABLE语句中使用GETDATE
下面的示例创建employees表并用GETDATE给出员工雇佣时间的默认值。

USEpubs

GO

CREATETABLEemployees

(

emp_idchar(11)NOTNULL,

emp_lnamevarchar(40)NOTNULL,

emp_fnamevarchar(20)NOTNULL,

emp_hire_datedatetimeDEFAULTGETDATE(),

emp_mgrvarchar(30)

)


GO


7GETUTCDATE

返回表示当前UTC时间(世界时间坐标或格林尼治标准时间)的datetime值。当前的UTC时间得自当前的本地时间和运行SQLServer的计算机操作系统中的时区设置。

语法
GETUTCDATE()

返回类型
datetime

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

GETUTCDATE无法在用户定义的函数内调用。

8MONTH

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

语法
MONTH(date)

参数
date

返回datetime或smalldatetime值或日期格式字符串的表达式。仅对1753年1月1日后的日期使用datetime数据类型。

返回类型
int

注释
MONTH等价于DATEPART(mm,date)。

将datetime值包含在引号中。对于早期日期,可将其存储为字符数据。

Microsoft®SQLServer™认可各种日期样式。有关日期和时间数据的更多信息,请参见CAST和CONVERT。

示例
下面的示例从日期03/12/1998中返回月份数。

SELECT"MonthNumber"=MONTH('03/12/1998')

GO

下面是结果集:

MonthNumber

------------

3

下例用数字指定日期。注意:SQLServer将0解释为01/01/1900。

SELECTMONTH(0),DAY(0),YEAR(0)

下面是结果集。

-----------------


111900


8YEAR

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

语法
YEAR(date)

参数
date

datetime或smalldatetime类型的表达式。

返回类型
int

注释
此函数等价于DATEPART(yy,date)。

示例
下例从日期03/12/1998中返回年份数。

SELECT"YearNumber"=YEAR('03/12/1998')

GO

下面是结果集:

YearNumber

------------

1998

下例用数字指定日期。注意:Microsoft®SQLServer™数据库将0解释为1900年1月1日。

SELECTMONTH(0),DAY(0),YEAR(0)

下面是结果集:

-----------------

111900


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: