SQLServer中的日期时间函数
DATEADD
在向指定日期加上一段时间的基础上,返回新的 datetime 值。
语法
DATEADD ( interval , number, date )
将一个日期加上一段期间后的日期。 interval :设定一个日期( Date )所加上的一段期间的单位。譬如 interval ="d" 表示 number的单位为日。 interval 的设定值如下:
设置
描述
yyyy
年Year
q
季Quarter
m
月Month
y
一年的日数
d
日Day
w
一周的日数
ww
周Weekday
h
时Hour
n
分钟Minute
s
秒Second
number :数值表达式,设定一个日期所加上的一段期间,可为正值或负值,正值表示加(结果为 date 以后的日期),负值表示减(结果为 date 以前的日期)。
date :待加减的日期。
例子: DateAdd ( "m" , 1 , "31-Jan-98")
结果: 28-Feb-98
说明:将日期 31-Jan-98 加上一个月,结果为 28-Feb-98 而非 31-Fe-98 。
例子: DateAdd ( "d" , 20 , "30-Jan-99")
结果: 1999/2/9
说明:将一个日期 30-Jan-99 加上 20 天后的日期。
DATEDIFF
返回跨两个指定日期的日期和时间边界数。
语法
DATEDIFF ( interval , startdate , enddate )
计算两个日期之间的期间。
interval :设定两个日期之间的期间计算之单位。譬如 interval ="m" 表示计算的单位为月。 interval 的设定值如:
日期部分
缩写
year
yy, yyyy
quarter
qq, q
Month
mm, m
dayofyear
dy, y
Day
dd, d
Week
wk, ww
Hour
hh,h
minute
mi, n
second
ss, s
millisecond
ms
startdate ,enddate :计算期间的两个日期表达式,若 enddate 较早,则两个日期之间的期间结果为正值;若 startdate 较早, 则结果为负值。
FW :设定每周第一天为星期几, 若未设定表示为星期天。 >FW 的设定值如下:
0 使用 >API 的设定值。
1 星期天
2 星期一
3 星期二
4 星期三
5 星期四
6 星期五
7 星期六
FY :设定一年的第一周, 若未设定则表示一月一日那一周为一年的第一周。 >FY 的设定值如下:
0 使用 >API 的设定值。
1 一月一日那一周为一年的第一周
2 至少包括四天的第一周为一年的第一周
3 包括七天的第一周为一年的第一周
例子: DateDiff ("d","25-Mar-99 ","30-Jun-99 ")
结果: 97
说明:显示两个日期之间的期间为 97 天
GETDATE
按 datetime 值的 Microsoft® SQL Server™ 标准内部格式返回当前系统日期和时间。
语法
GETDATE ( )
返回类型
datetime
注释
日期函数可用在 SELECT 语句的选择列表或用在查询的 WHERE 子句中。
在设计报表时,GETDATE 函数可用于在每次生成报表时打印当前日期和时间。GETDATE 对于跟踪活动也很有用,诸如记录事务在某一帐户上发生的时间。
示例
A. 用 GET DATE 返回当前日期和时间
下面的示例得出当前系统日期和时间:
SELECT GETDATE()
GO
下面是结果集:
-------------------------
July 29 1998 2:50 PM
(1 row(s) affected)
B. 在 CREATE TABLE 语句中使用 GETDATE
下面的示例创建 employees 表并用 GETDATE 给出员工雇佣时间的默认值。
USE pubs
GO
CREATE TABLE employees
(
emp_id char(11) NOT NULL,
emp_lname varchar(40) NOT NULL,
emp_fname varchar(20) NOT NULL,
emp_hire_date datetime DEFAULT GETDATE(),
emp_mgr varchar(30)
)
GO
DATENAME
返回代表指定日期的指定日期部分的字符串。
语法
DATENAME ( datepart , date )
参数
datepart
是指定应返回的日期部分的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。
日期部分
缩写
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。
如果只指定年份的最后两位数字,则小于或等于 two digit year cutoff 配置选项的值的最后两位数字的值所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2050(默认),则 49 被解释为 2049,50 被解释为 1950。为避免模糊,请使用四位数字的年份。
返回类型
nvarchar
注释
SQL Server 自动在字符和 datetime 值间按需要进行转换,例如,当将字符值与 datetime 值进行比较时。
示例
此示例从 GETDATE 返回的日期中提取月份名。
SELECT DATENAME(month, getdate()) AS ‘Month Name‘
下面是结果集:
Month Name
------------------------------
February
Day( 日期的字符串或表达式 )
返回代表指定日期的天的日期部分的整数。
语法
DAY ( date )
参数
date
类型为 datetime 或 smalldatetime 的表达式。
返回类型
int
注释
此函数等价于 DATEPART(dd, date)。
示例
此示例返回从日期 03/12/1998 后的天数。
SELECT DAY(‘03/12/1998‘) AS ‘Day Number‘
GO
下面是结果集:
Day Number
------------
12
在此示例中,以数字表示日期。注意:Microsoft® SQL Server™ 将 0 解释为 01/01/1900。
SELECT MONTH(0), DAY(0), YEAR(0)
下面是结果集。
----- ------ ------
1 1 1900
例子: Day(" 12/1/1999 ")
结果: 1
MONTH
返回代表指定日期月份的整数。
语法
MONTH ( date )
参数
date
返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。仅对 1753 年 1 月 1 日后的日期使用 datetime 数据类型。
返回类型
int
注释
MONTH 等价于 DATEPART(mm, date)。
将 datetime 值包含在引号中。对于早期日期,可将其存储为字符数据。
Microsoft® SQL Server™ 认可各种日期样式。
示例
下面的示例从日期 03/12/1998 中返回月份数。
SELECT "Month Number" = MONTH(‘03/12/1998‘)
GO
下面是结果集:
Month Number
------------
3
下例用数字指定日期。注意:SQL Server 将 0 解释为 01/01/1900。
SELECT MONTH(0), DAY(0), YEAR(0)
下面是结果集。
----- ------ ------
1 1 1900
YEAR
返回表示指定日期中的年份的整数。
语法
YEAR ( date )
参数
date
datetime 或 smalldatetime 类型的表达式。
返回类型
int
注释
此函数等价于 DATEPART(yy, date)。
示例
下例从日期 03/12/1998 中返回年份数。
SELECT "Year Number" = YEAR(‘03/12/1998‘)
GO
下面是结果集:
Year Number
------------
1998
下例用数字指定日期。注意:Microsoft® SQL Server™ 数据库将 0 解释为 1900 年 1 月 1 日。
SELECT MONTH(0), DAY(0), YEAR(0)
下面是结果集:
----- ------ ------
1 1 1900
DATEPART
返回代表指定日期的指定日期部分的整数。
语法
DATEPART ( datepart , date )
参数
datepart
是指定应返回的日期部分的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。
日期部分
缩写
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) 日期部分反映对 SET DATEFIRST 作的更改。任何一年的 1 月 1 日定义了 week 日期部分的开始数字,例如:DATEPART(wk, ‘Jan 1, xxxx‘) = 1,此处 xxxx 代表任一年。
weekday (dw) 日期部分返回对应于星期中的某天的数,例如:Sunday = 1、Saturday = 7。weekday 日期部分产生的数取决于 SET DATEFIRST 设定的值,此命令设定星期中的第一天。
date
是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。对 1753 年 1 月 1 日之后的日期用datetime 数据类型。更早的日期存储为字符数据。当输入 datetime 值时,始终将其放入引号中。因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。
如果只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049 (默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。
返回类型
int
注释
DAY、MONTH、和 YEAR 函数分别是 DATEPART(dd, date)、DATEPART(mm, date)、和 DATEPART(yy, date) 的同义词。
示例
GETDATE 函数返回当前日期;然而,比较时并不总是需要完整的日期信息(通常只是对日期的一部分进行比较)。此示例显示 GETDATE 及 DATEPART 的输出。
SELECT GETDATE() AS ‘Current Date‘
GO
下面是结果集:
Current Date
---------------------------
Feb 18 1998 11:46PM
SELECT DATEPART(month, GETDATE()) AS ‘Month Number‘
GO
下面是结果集:
Month Number
------------
2
此示例假设日期是 5 月 29 日。
SELECT DATEPART(month, GETDATE())
GO
下面是结果集:
-----------
5
(1 row(s) affected)
在此示例中,以数字表示日期。注意:SQL Server 将 0 解释为 01/01/1900。
SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)
下面是结果集:
----- ------ ------
1 1 1900
GETUTCDATE
返回表示当前 UTC 时间(世界时间坐标或格林尼治标准时间)的 datetime 值。当前的 UTC 时间得自当前的本地时间和运行 SQL Server 的计算机操作系统中的时区设置。
语法
GETUTCDATE()
返回类型
datetime
注释
GETUTCDATE 是非确定性函数。引用该列的视图和表达式无法进行索引。
GETUTCDATE 无法在用户定义的函数内调用。