在不同的DBMS中,系统都提供了许多用于处理日期和时间的函数,通过这些函数可以计算特定日期和时间。
动图学习
有时数据库表中存储的日期格式是不规范的,如“02.09.02”。为了方便用户查看,需要改变日期格式,如“2002-09-02”(“年-月-日”格式)。为了解决这一问题,下面介绍两种方法。
1.把长日期格式数据转换为短日期格式数据
函数表达式CONVERT(char(10),getdate(),120)可以将日期数据转换成yyyy-mm-dd格式。其中,120是格式代码,char(10)是指取出前10位字符。SQL Server数据库并不支持分开的TIME、DATE和TIMESTAMP数据类型,而是支持单一的DATETIME数据类型,用于保存符合要求的日期和时间值。在SQL Server中,可使用CONVERT函数实现类型的转换。语法格式如下:
参数说明:
date_type:要转换的数据类型。
expression:DATETIME类型的数据。
style:指定转换形式。其取值不同则对应的日期、时间格式将不同。style参数不同取值对应的日期、时间格式如表5.1所示。
表5.1 style参数不同取值对应的日期、时间格式
2.将日期格式中的“-”替换为“/”
REPLACE()函数可以实现寻找列值中的“-”,将其替换成“/”的功能。
示例05 将如“2018-01-22 14:53:55.290”的日期格式转换成如“2018/01/22”的日期格式。
输入:
输出(如图5 . 5所示):
图5.5 转换日期格式
要想计算两个日期的间隔天数,可以使用DATEDIFF()函数实现。
DATEDIFF()函数的语法格式如下:
参数说明:
datepart:规定了应基于哪种日期单位计算间隔时长。SQL Server识别的日期与缩写如表5.2所示。
表5.2 日期和缩写
续表
startdate:计算的开始日期。返回值为datetime或smalldatetime值或日期格式字符串的表达式。
enddate:计算的终止日期。返回值为datetime或smalldatetime值或日期格式字符串的表达式。
例如,利用DATEDIFF()函数查询2018年3月1日到2018年5月11日之间的天数,示例代码如下:
注意
如果startdate比enddate晚,则返回负值;当结果超出整数值范围时,DATEDIFF函数将产生错误。
该函数也适用于MySQL数据库。DATEDIFF()函数在MySQL数据库中的语法格式如下:
该函数返回起始时间expr1和结束时间expr2之间的天数。expr1和expr2为日期或date-and-time表达式。计算中只用到这些值的日期部分。
示例06 计算bookpub图书出版表中图书出版的日期与该图书下一次出版日期之间相差的天数。
输入:
输出(如图5 . 6所示):
图5.6 计算两个日期的间隔天数
1.DAY()函数
DAY()函数返回代表指定日期的天的日期部分的整数。其语法格式如下:
参数说明:
date:类型为datetime或smalldatetime的表达式。
DAY()函数返回值的数据类型为int。
下面举例介绍一下DAY()函数的用法,返回月份值,输出结果为“1,3”,代码如下:
注意
SQL Server将date为0解释为01/01/1900。
2.MONTH()函数
要实现按月查询数据可以使用日期函数MONTH()。该函数的语法格式如下:
参数说明:
date:datetime或smalldatetime类型的值或日期格式字符串的表达式,仅对1753年1月1日后的日期使用datetime数据类型。MONTH()函数返回值的数据类型为int。
MONTH()函数能够将日期时间表达式date中的月份返回,返回的月份以数值1~12来表示,1代表一月、2代表二月,以此类推。
同样需要注意的是,如果将date设置为0,SQL Server会将此值解释为1900年1月1日。
下面举例介绍MONTH()函数的用法。如下面的示例从日期03.11.2017中返回月份数,返回结果为3。
3.YEAR()函数
YEAR()函数用于返回指定日期中的年份的整数。其语法格式如下:
参数说明:
date:datetime或smalldatetime类型的表达式。
YEAR()函数返回值的数据类型为int。
注意
(1)此函数等价于DatePart(yy,date)。
(2)SQL Server将0解释为01/01/1900。
(3)在使用日期函数时,其日期只应在1753-9999年之间,这是SQL Server数据库所能识别的日期范围,否则会出现错误。
下面举例介绍一下YEAR()函数的用法,如下面示例返回指定日期的年份信息:
实现的结果如图5.7所示。
图5.7 使用YEAR()函数
示例07 按指定日期的月和年查询bookinfo图书信息表中零基础系列图书的出版日期在2017年10月份的图书信息。
输入:
输出(如图5 . 8所示):
图5.8 按指定日期查询数据