![PostgreSQL 11从入门到精通(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/374/27563374/b_27563374.jpg)
6.4 日期和时间函数
日期和时间函数主要用来处理日期和时间值,一般的日期函数除了使用DATE类型的参数外,也可以使用DATETIME或者TIMESTAMP类型的参数,但会忽略这些值的时间部分。相同的,以TIME类型值为参数的函数,可以接受TIMESTAMP类型的参数,但会忽略日期部分。许多日期函数可以同时接受数字和字符串类型的两种参数。本节将介绍各种日期和时间函数的功能和用法。
6.4.1 获取当前日期的函数和获取当前时间的函数
CURRENT_DATE函数的作用是将当前日期按照‘YYYY-MM-DD’格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。
【例6.39】使用日期函数获取系统当前日期,输入语句如下:
SELECT CURRENT_DATE;
语句执行后,结果如图6-39所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P141_12708.jpg?sign=1739293442-fR9fw0hN3tsCpjpj19772NkgI0DNbRRt-0-56ccaf1415c2f26529d2caaa62a8deb5)
图6-39 SQL语句执行结果
可以看到,返回了相同的系统当前日期。
CURRENT_TIME函数的作用是将当前时间以‘HH:MM:SS’的格式返回,具体格式根据函数用在字符串或是数字语境中而定。
【例6.40】使用时间函数获取系统当前日期,输入语句如下:
SELECT CURRENT_TIME;
语句执行后,结果如图6-40所示。可以看到,函数返回了系统当前时间。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P142_12733.jpg?sign=1739293442-HIx51TIqoU2Ue482Iu4hGE8lvYVBcZEK-0-57b111412d0c1949ea3d590cd89aedf3)
图6-40 SQL语句执行结果
LOCALTIME函数的作用是将当前时间以‘HH:MM:SS’的格式返回,唯一和CURRENT_TIME函数不同的是返回时不带时区值。
【例6.41】使用时间函数获取系统当前日期,输入语句如下:
SELECT LOCALTIME;
语句执行后,结果如图6-41所示。可以看到,函数返回了系统当前时间,但是不带时区。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P142_12750.jpg?sign=1739293442-IGOcjRQf1TaA2Bu91EJkTDupKLpWbdV6-0-4db2c95660819d44d8e3a2a20521fd6a)
图6-41 SQL语句执行结果
6.4.2 获取当前日期和时间的函数
CURRENT_TIMESTAMP、LOCALTIMESTAMP和NOW()3个函数的作用相同,返回当前日期和时间值,格式为‘YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS,具体格式根据函数是否用在字符串或数字语境中而定。
【例6.42】使用日期时间函数获取当前系统日期和时间,输入语句如下:
SELECT CURRENT_TIMESTAMP,LOCALTIMESTAMP,NOW();
语句执行后,结果如图6-42所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P143_12779.jpg?sign=1739293442-wQNxelBeNayGlncpEeoWqmHVBeqcNWOx-0-e996ed9c7def7a7336d8e09da0e6168f)
图6-42 SQL语句执行结果
可以看到,3个函数返回的日期和时间是相同的。唯一不同的是,LOCALTIMESTAMP函数的返回值不带时区。
6.4.3 获取日期的指定值的函数EXTRACT(type FROM d)
EXTRACT(type FROM date)函数从日期中提取其部分,而不是执行日期运算。
【例6.43】使用EXTRACT函数从日期中提取一个月中的第几天,输入语句如下:
SELECT EXTRACT(DAY FROM TIMESTAMP '2017-09-10 10:18:40');
语句执行后,结果如图6-43所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P143_12798.jpg?sign=1739293442-Eu7Dw5QMHlsvP3wSt6RNcAWi7Et61EUS-0-980263329911f312004de797f6303e08)
图6-43 SQL语句执行结果
【例6.44】使用EXTRACT函数从日期中提取月份,输入语句如下:
SELECT EXTRACT(MONTH FROM TIMESTAMP '2019-09-10 10:18:40');
语句执行后,结果如图6-44所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P143_12816.jpg?sign=1739293442-W0DOOMiXwM1fVjrgIDWGpe7N82NbdoIz-0-a32a1fe360575551de0558819b527dd7)
图6-44 SQL语句执行结果
【例6.45】使用EXTRACT函数从日期中提取年份,输入语句如下:
SELECT EXTRACT(YEAR FROM TIMESTAMP '2019-09-10 10:18:40');
语句执行后,结果如图6-45所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P144_12842.jpg?sign=1739293442-3ZsIQJ6rDAdTRdWrE5q5ZTNjXiJg5s2M-0-65970cda4a5b6cf3a2d3f3b5143a041e)
图6-45 SQL语句执行结果
【例6.46】使用EXTRACT函数查询指定日期是一年中的第几天,输入语句如下:
SELECT EXTRACT(DOY FROM TIMESTAMP '2019-09-10 10:18:40');
语句执行后,结果如图6-46所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P144_12860.jpg?sign=1739293442-W0lhyK5oF7SFhnISdSDZCXxvnYuXtGIU-0-e37ab50599750d72a4a22c28d8f5c914)
图6-46 SQL语句执行结果
【例6.47】使用EXTRACT函数查询指定日期是一周中的星期几,输入语句如下:
SELECT EXTRACT(DOW FROM TIMESTAMP '2019-09-10 10:18:40');
语句执行后,结果如图6-47所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P144_12878.jpg?sign=1739293442-hxXTEmhvZohR7n970U0yTseDkWEvmt89-0-8e34a5a6740c25b6d849cdfb47fa29ef)
图6-47 SQL语句执行结果
从结果可以看出,2019-09-10是星期日。需要读者注意的是,此函数的星期编号为0~6,星期日的返回结果为0。
【例6.48】使用EXTRACT函数查询指定日期是该年的第几季度(1~4),输入语句如下:
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2019-09-10 10:18:40');
语句执行后,结果如图6-48所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P145_12906.jpg?sign=1739293442-4OTXZ8Mbi2TiB65tEAG9PRyai5oMlgvt-0-40871abbef9093f604920de72f0eef1c)
图6-48 SQL语句执行结果
从结果可以看出,2019-09-10是该年中的第3季度。
6.4.4 日期和时间的运算操作
日期和时间之间可以有加、减、乘、除运算操作。本节主要讲述这些操作的方法和技巧。
【例6.49】 计算指定日期加上间隔天数后的结果,输入语句如下:
SELECT DATE '2019-09-28' + integer '10';
语句执行后,结果如图6-49所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P145_12924.jpg?sign=1739293442-gB7FUsh6iBUZVI5StZtePH3IBP76tYtk-0-2183530645dd910a2fa0973170fcd671)
图6-49 SQL语句执行结果
【例6.50】 计算指定日期加上间隔小时后的结果,输入语句如下:
SELECT DATE '2019-09-28' + interval '3 hour';
语句执行后,结果如图6-50所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P145_12942.jpg?sign=1739293442-qeVK4bArQRdJvnofX70NOoTb1QYRCrOG-0-9ce331c77927425aef3f23e7a91bbfff)
图6-50 SQL语句执行结果
【例6.51】 计算指定日期加上指定时间后的结果,输入语句如下:
SELECT DATE '2019-09-28' + time '06:00';
语句执行后,结果如图6-51所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P146_12965.jpg?sign=1739293442-09wGDKLNvM1IjCLWjoYfAt5IJr3UT7CK-0-e59e66fe795712ac6d92969dfccdd124)
图6-51 SQL语句执行结果
【例6.52】 计算指定日期和时间加上间隔时间后的结果,输入语句如下:
SELECT TIMESTAMP '2019-09-28 02:00:00' + interval '10 hours';
语句执行后,结果如图6-52所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P146_12981.jpg?sign=1739293442-bJCD3nxjxlQnKTrCTWo6XGhO4sw2Kzbj-0-f78d9ccee4dbda43b27db96c2b2a8699)
图6-52 SQL语句执行结果
【例6.53】 计算指定日期之间的间隔天数,输入语句如下:
SELECT date '2019-11-01' - date '2019-09-10';
语句执行后,结果如图6-53所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P146_12997.jpg?sign=1739293442-FDTzGkHMWVucmfGE6xCCuYDObJYEPSrF-0-a9a520dcaefba697e8eea1f6e10a6bc1)
图6-53 SQL语句执行结果
【例6.54】 计算指定日期减去间隔天数后的结果,输入语句如下:
SELECT DATE '2019-09-28' - integer '10';
语句执行后,结果如图6-54所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P147_13025.jpg?sign=1739293442-zsbM4XgTminAE8xGoZ50Akj7bb86eTRe-0-7e4ac4cfcc54c1b74f5d525f412255f8)
图6-54 SQL语句执行结果
【例6.55】 计算整数与天数相乘的结果,输入语句如下:
SELECT 15 * interval '2 day';
语句执行后,结果如图6-55所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P147_13042.jpg?sign=1739293442-14TzQ3sULzC2RJxFtSb2xo8HfKN1g7hF-0-9dd9a3c5dae6d2ea80637b2787d3bf7c)
图6-55 SQL语句执行结果
【例6.56】 计算整数与秒数相乘的结果,输入语句如下:
SELECT 50 * interval '2 second';
语句执行后,结果如图6-56所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P147_13058.jpg?sign=1739293442-morX1epVdf6RhbZmSer8O23xVYeJ5eTs-0-119c4ca7a98a036b7b84b91e05820d47)
图6-56 SQL语句执行结果
【例6.57】 计算小时数与整数相除的结果,输入语句如下:
SELECT interval '1 hour' / integer '2';
语句执行后,结果如图6-57所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P148_13081.jpg?sign=1739293442-e5zz1nuvCZJIJq8lz5R9nAGdG5vvS335-0-217ae7cb8e4fa88a64739692213f61f1)
图6-57 SQL语句执行结果