sql函数DATEPART()与DATENAME()
今天在写存储过程时 通过sql操作datetime的时候,偶然发现 了 DATEPART()与 DATENAME() 两个函数。这两个函数我以前从来都没有用过。而且这两个函数的作用也很重要!
1、 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。为避免模糊,请使用四位数的年份。
有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。
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
2、 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。有关指定日期的更多信息,请参见 datetime 和 smalldatetime。有关时间值指定的更多信息,请参见时间格式。
如果只指定年份的最后两位数字,则小于或等于 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
3、比较 DATEPART 和 DATENAME
DATEPART 和 DATENAME 函数将 datetime 值的指定部分(年、季度、天、小时等)生成为整数值或 ASCII 字符串。由于 smalldatetime 只能精确到分钟,所以在这两个函数中使用 smalldatetime 值时,返回的秒和毫秒部分总是为零。
下面的示例假定日期为 5 月 29 日:
SELECT DATEPART(month, GETDATE())
下面是结果集:
------------
5
(1 row(s) affected)
SELECT DATENAME(month, GETDATE())
下面是结果集:
------------
May
(1 row(s) affected)
4、 其实关于 日期和时间的 函数还有不少,如下:
这些标量函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。
下表列出日期和时间函数以及它们的确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
函数 | 确定性 |
---|---|
DATEADD | 具有确定性 |
DATEDIFF | 具有确定性 |
DATENAME | 不具有确定性 |
DATEPART | 除了用作 DATEPART (dw, date) 外都具有确定性。dw 是工作日的日期部分,取决于由设置每周第一天的 SET DATEFIRST 所设置的值。 |
DAY | 具有确定性 |
GETDATE | 不具有确定性 |
GETUTCDATE | 不具有确定性 |
MONTH | 具有确定性 |
YEAR | 具有确定性 |