SQL內置Function--日期和时间函数
2006-11-10 14:42
363 查看
日期和时间函数
这些标量函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。
下表列出日期和时间函数以及它们的确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
===========
语法
DATEADD(datepart,number,date)
参数
datepart
是规定应向日期的哪一部分返回新值的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。
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天。
下面是结果集:
语法
DATEDIFF(datepart,startdate,enddate)
参数
datepart
是规定了应在日期的哪一部分计算差额的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。
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数据库中标题发布日期和当前日期间的天数。
语法
DATENAME(datepart,date)
参数
datepart
是指定应返回的日期部分的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。
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返回的日期中提取月份名。
下面是结果集:
语法
DATEPART(datepart,date)
参数
datepart
是指定应返回的日期部分的参数。下表列出了Microsoft®SQLServer™识别的日期部分和缩写。
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的输出。
下面是结果集:
下面是结果集:
此示例假设日期是5月29日。
下面是结果集:
在此示例中,以数字表示日期。注意:SQLServer将0解释为01/01/1900。
下面是结果集:
语法
DAY(date)
参数
date
类型为datetime或smalldatetime的表达式。
返回类型
int
注释
此函数等价于DATEPART(dd,date)。
示例
此示例返回从日期03/12/1998后的天数。
下面是结果集:
在此示例中,以数字表示日期。注意:Microsoft®SQLServer™将0解释为01/01/1900。
下面是结果集。
语法
GETDATE()
返回类型
datetime
注释
日期函数可用在SELECT语句的选择列表或用在查询的WHERE子句中。
在设计报表时,GETDATE函数可用于在每次生成报表时打印当前日期和时间。GETDATE对于跟踪活动也很有用,诸如记录事务在某一帐户上发生的时间。
示例
A.用GETDATE返回当前日期和时间
下面的示例得出当前系统日期和时间:
下面是结果集:
B.在CREATETABLE语句中使用GETDATE
下面的示例创建employees表并用GETDATE给出员工雇佣时间的默认值。
语法
GETUTCDATE()
返回类型
datetime
注释
GETUTCDATE是非确定性函数。引用该列的视图和表达式无法进行索引。
GETUTCDATE无法在用户定义的函数内调用。
语法
MONTH(date)
参数
date
返回datetime或smalldatetime值或日期格式字符串的表达式。仅对1753年1月1日后的日期使用datetime数据类型。
返回类型
int
注释
MONTH等价于DATEPART(mm,date)。
将datetime值包含在引号中。对于早期日期,可将其存储为字符数据。
Microsoft®SQLServer™认可各种日期样式。有关日期和时间数据的更多信息,请参见CAST和CONVERT。
示例
下面的示例从日期03/12/1998中返回月份数。
下面是结果集:
下例用数字指定日期。注意:SQLServer将0解释为01/01/1900。
下面是结果集。
语法
YEAR(date)
参数
date
datetime或smalldatetime类型的表达式。
返回类型
int
注释
此函数等价于DATEPART(yy,date)。
示例
下例从日期03/12/1998中返回年份数。
下面是结果集:
下例用数字指定日期。注意:Microsoft®SQLServer™数据库将0解释为1900年1月1日。
下面是结果集:
111900
这些标量函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。
下表列出日期和时间函数以及它们的确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
函数 | 确定性 |
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 |
是用来增加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是返回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 |
是返回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 |
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
相关文章推荐
- SQL常用日期时间处理函数
- PHPstorm 函数时间注释的修改 正常的PHPstorm里面函数方法的注释是没有动态时间设置的,但是看了PHP file里面有时间日期的注释,而PHP Function Doc Commen
- SQL日期和时间函数
- PL/SQL 日期时间类型函数及运算
- SQL日期和时间函数
- SQL內置Function--文本和图像函数
- SQL---NOW()函数,如何在mysql数据库中插入当前日期,当前时间
- SQL中日期/时间函数的处理
- SQL_Server_2005_日期和时间函数(描述及实例) (转)
- SQL日期和时间函数
- Transact-SQL 中的日期时间及相关函数
- SQLSCRIPT通过函数将ERP时间戳分解出日期和时间
- SQL 10 函数 3 日期时间函数 - 2 主流数据库系统中日期时间类型的表示方式
- T-SQL:15个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受@@DateFirst、语言版本影响
- T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响!
- SQL日期和时间函数
- SQL日期和时间函数
- T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响
- 43.Oracle数据库SQL开发之 日期和时间的存储与处理——使用时间值函数
- 获取服务器的系统日期,出错时采用客户机系统时间。本函数支持MS SQL Server 版本。