突出重围:Transact-SQL管理与开发实例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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。