SQL编程思想:基于5种主流数据库代码实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


3.1.4 日期函数

日期函数用于操作日期和时间数据,例如获取当前日期、计算两个日期之间的间隔以及获取日期的部分信息等。表3.3列出了常见的SQL日期函数及它们在5种主流数据库中的实现。

表3.3 常见的SQL日期函数与实现

下面我们通过一些示例来说明这些函数的作用和注意事项。

1.返回当前日期和时间

CURRENT_DATE、CURRENT_TIME以及CURRENT_TIMESTAMP函数分别返回了数据库系统当前的日期、时间以及时间戳(日期和时间),例如:

查询返回的结果取决于我们执行语句的时间。

Oracle中的日期类型包含了日期和时间信息,Oracle不支持CURRENT_TIME函数,例如:

查询返回的结果如下:

在Microsoft SQL Server中,需要使用GETDATE函数返回当前时间戳,然后通过类型转换函数CAST(expr AS type)将结果转换为日期或者时间类型,例如:

3.1.5节将介绍类型转换函数。查询返回的结果如下:

2.提取日期中的部分信息

EXTRACT(p FROM dt)函数提取日期时间中的部分信息,比如年、月、日、时、分、秒等,如下所示:

函数参数中的YEAR表示提取年份信息。查询返回的结果如下:

除提取年份信息外,我们也可以使用MONTH、DAY、HOUR、MINUTE、SECOND等参数提取日期中的其他信息。

Microsoft SQL Server使用DATEPART(p,dt)函数提取日期中的信息,例如:

函数参数中的YEAR表示提取年份信息,同样也可以使用MONTH、DAY、HOUR、MINUTE、SECOND等参数提取日期中的其他信息。查询返回的结果与上面的示例相同。

SQLite提供了日期格式化函数STRFTIME,可以提取日期中的信息,例如:

函数中的第一个参数%Y代表4位数的年份,我们也可以使用%m、%d、%H、%M、%S等参数提取日期中的其他信息。查询返回的结果与上面的示例相同。

3.日期的加减运算

日期的加减运算主要包括两个日期相减以及一个日期加/减一个时间间隔,例如:

在Oracle和PostgreSQL中,两个日期相减就可以得到它们之间相差的天数,日期加上一个时间间隔(INTERVAL)就可以得到一个新的日期。查询返回的结果如下:

2021年2月有28天,2021年2月1日减去一个月是2021年1月1日。

MySQL使用DATEDIFF(dt2,dt1)函数计算日期dt2减去日期dt1得到的天数,例如:

查询返回的结果和上面的示例相同。

Microsoft SQL Server使用DATEDIFF(p,dt1,dt2)函数计算日期dt2减去日期dt1得到的时间间隔,使用DATEADD(p,n,dt)函数为日期增加一个时间间隔,例如:

DATEDIFF函数中的第一个参数(DAY)表示计算第二个日期减去第一个日期的天数,也可以返回月数(MONTH)或者年数(YEAR)等。DATEADD函数在2021年2月1日的基础上增加了-1个月,也就是减去1个月。查询返回的结果和上面的示例相同。

SQLite可以利用STRFTIME函数实现两个日期的相减,或者为日期增加一个时间间隔,例如:

前两个STRFTIME函数中的参数%J表示将日期转换为儒略日(Julian Day)。第3个STRFTIME函数格式化日期的同时增加了一个时间间隔。查询返回的结果和上面的示例相同。