关于DATE函数datediff dateadd datename等

有关日期函数的知识触及的也比较多,介于在资产出租的系统中,批量部分涉及到该部分的相关知识,所以在此简单的做一些归纳:

确定性函数和非确定性函数

所有的函数都是确定性或非确定性的:

  • 在使用特定的输入值集调用确定性函数的任何时候,它们总是返回相同的结果。
  • 在每次使用特定的输入值集调用非确定性函数时,它们可能返回不同的结果。

函数是否为确定性函数或非确定性函数称为函数的确定性。

例如,DATEADD 内置函数是确定性函数,因为对于其三个参数的任何给定参数值集总是返回相同的结果。GETDATE 不是确定性函数,因为总是使用相同的参数唤醒调用它,而它在每次执行时返回结果都不同。

常见的几个Date函数用法:

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

USE pubs

GO

SELECT DATEADD(day, 21, pubdate) AS timeframe

FROM titles

GO

 

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

USE pubs

GO

SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days

FROM titles

GO

 

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

SELECT DATENAME(month, getdate()) AS 'Month Name'

 

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

SELECT DATEPART(month, GETDATE()) AS 'Month Number'

 

比较常用的DATEDIFF

语法

DATEDIFF ( datepart , startdate , enddate )

datepart

是规定了应在日期的哪一部分计算差额的参数

 

startdate

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

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

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

 

enddate

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

返回类型

integer

注释

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

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

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

 

DATEADD

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

语法

DATEADD ( datepart , number, date )

参数

datepart

是规定应向日期的哪一部分返回新值的参数。

 

number

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

 

date

是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

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

返回类型

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

  

DATENAME

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

 

语法

DATENAME ( datepart , date )

参数

datepart

是指定应返回的日期部分的参数

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 值进行比较时。

原文地址:https://www.cnblogs.com/howie/p/2555807.html