1.7 常用日期时间函数
Transact-SQL中提供了很多对日期时间的操作函数。下面介绍常用的日期时间函数。
1.7.1 获取当前日期GETDATE
GETDATE函数以datetime数据类型的格式返回当前SQL Server服务器所在计算机的日期和时间。其语法格式为GETDATE()。返回值舍入到最近的秒小数部分,精度为.333秒,数据库时区偏移量不包含在内。
1.实例
下面的代码获取当前时间和日期。
SELECT GETDATE(); GO
2.结果
返回的结果值格式如下。
2008-04-29 10:54:47.967
3.将GETDATE函数用作缺省值
GETDATE函数常见的用法是作为某个字段的缺省值。下面的代码将演示缺省值的使用方法。
USE AdventureWorks; GO --创建临时表 CREATE TABLE #employees ( emp_id char(11) NOT NULL, emp_hire_date datetime DEFAULT GETDATE(), emp_title nvarchar(50) NOT NULL ); GO --从HumanResources.Employee表中提取已婚、男性雇员信息存储到临时表中 INSERT INTO #employees (emp_id, emp_title) SELECT E.EmployeeID, E.Title FROM HumanResources.Employee E WHERE E.MaritalStatus=' M' AND E.Gender=' M' ; GO --查询临时表的内容,发现已经自动输入GETDATE函数的时间 SELECT * FROM #employees; GO --删除临时表 DROP TABLE #employees; GO
源代码文件:\代码\0130.sql。
1.7.2 获取年度信息YEAR
YEAR函数以int数据类型的格式返回特定日期的年度信息。其语法格式为YEAR(date数据)。其中的date数据是一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
下面的代码返回当前日期的年度信息。
SELECT "Year Number" = YEAR(GETDATE()) GO
源代码文件:\代码\0131.sql。
1.7.3 获取月份信息MONTH
MONTH函数以int数据类型的格式返回特定日期的月份信息。其语法格式为MONTH(date数据)。其中的date数据是一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
下面的代码返回当前日期的月份信息。
SELECT "Month Number" =MONTH(GETDATE()) GO
源代码文件:\代码\0132.sql。
1.7.4 获取天数信息DAY
DAY函数以int数据类型的格式返回特定日期的天数信息。其语法格式为DAY(date数据)。其中的date数据是一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
下面的代码返回当前日期的天数信息。
SELECT "Day Number" =DAY(GETDATE()) GO
源代码文件:\代码\0133.sql。
1.7.5 任意获取日期时间值部分DATEPART
DATEPART函数以int数据类型的格式返回某个日期时间数据的指定部分。
1.语法格式
DATEPART ( datepart , date数据 )
● datepart:特定的要返回的数据的格式代码。
● date数据:一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
2.Datepart取值
DatePart部分的取值如表1-3所示。
表1-3 Datepart部分取值
3.实例
下面以获取年份的3种设置DatePart的格式为例进行说明,执行结果表明这些设置返回的年份值是完全一样的。
SELECT DATEPART(Year, GETDATE()) as ’年份1' , DATEPART(YYYY, GETDATE()) as ’年份2' , DATEPART(YY, GETDATE()) as ’年份3'
源代码文件:\代码\0134.sql。
1.7.6 日期加法DATEADD
DATEADD函数将某个日期加上一个特定的时间间隔值后返回datetime数据类型的值。
1.语法格式
DATEADD(datepart, number, date数据)
● Number:用于与datepart相加的值。如果指定了非整数值,则将舍弃该值的小数部分。例如,如果为datepart指定day,为number指定1.75,则date将增加1。
● Date数据:一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
● Datepart:见表1-3。
2.实例
下面的代码从架构Sales中提取表SalesOrderHeader的OrderDate字段(datetime数据类型,not null),然后将其添加14天。
USE AdventureWorks; GO SELECT O.OrderDate as ’订单日期’, DATEADD(day, 14, O.OrderDate)AS ’相加后的日期’ FROM Sales.SalesOrderHeader O; GO
源代码文件:\代码\0135.sql。
1.7.7 日期减法DATEDIFF
DATEDIFF函数将两个特定的日期数据相减,得到的结果可以按照datepart指定的格式返回特定的数据。
1.语法格式
DATEDIFF(datepart, startdate, enddate)
执行中将使用enddate减以startdate的值,如果startdate晚于enddate将返回负值。执行结果如果超出整数范围将提示错误。
语法中主要的参数说明如下。
● startdate:一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
● enddate:一个可以解析为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。
● Datepart:见表1-3。
2.实例
下面的代码将用当前日期与订单产生日期作减法,返回两者的天数,即订单产生到当前共有多少天。
USE AdventureWorks; GO SELECT O.OrderDate as ’订单日期’, DATEDIFF(day, O.OrderDate, GETDATE()) AS ’相减后的天数’ FROM Sales.SalesOrderHeader O; GO
源代码文件:\代码\0136.sql。
1.7.8 2008中新增的日期时间型函数
下面介绍SQL Server 2008中新增加的日期时间型函数。
1.获取系统时间SYSDATETIME
SYEDATETIME函数以datetime2(7)数据类型的格式返回当前系统的日期和时间。其语法格式为SYSDATETIME()。返回值有七个小数位,但只精确到10毫秒。数据库时区偏移量未包含在内。
2.获取当前日期和时间SYSDATETIMEOFFSET
SYEDATETIMEOFFSET函数以datetimeoffset(7)数据类型的格式返回当前系统的日期和时间。其语法格式为SYSDATETIMEOFFSET()。返回值有七个小数位,但只精确到10毫秒。数据库时区偏移量包含在内。
1.7.9 判断是否为日期数据ISDATE
ISDATE函数可以验证某个输入值是否为有效的日期数据。
1.语法结构
ISDATE(expression)
2.返回值
● 若表达式为有效的日期数据:1。
● 否则:0。