PostgreSQL函数——时间函数

时间类型

timestamp:时间戳
格式为1997-01-01 00:00:00,January 8 04:05:06 1999 PST

date:日期
有1997-01-01,19970101,1/1/1997,Jan-1-1997等多种格式

time:时间
有12:00:00,120000,12:00,8:00 AM,8:00 PM等格式

interval:时间间隔
格式为 1 year 2 months 3 days 4 hours 5 minutes 6 seconds

缩写含义
YYears
MMonths (in the date part)
WWeeks
DDays
HHours
MMinutes (in the time part)
SSeconds

获取当前时间

now():获取当前完整时间
current_timestamp:当前事务开始时的时间戳,同 now() 函数等效
current_date:获取当前日期
current_time:获取当前时间
localtime:当前时间
localtimestamp:当前事务开始时的时间戳

SELECT now(),current_timestamp,current_date,current_time,localtime,localtimestamp;

结果:
在这里插入图片描述
transaction_timestamp():它等同于CURRENT_TIMESTAMP,但命名是为了清楚地反映它返回的内容.
statement_timestamp():它返回当前语句的开始时间.
clock_timestamp():它返回实际的当前时间,因此即使在单个SQL命令中它的值也会发生变化.
timeofday():它返回实际的当前时间,但是作为带格式的文本字符串而不是带有时区值的时间戳.

select transaction_timestamp(),statement_timestamp(),clock_timestamp(),timeofday();

结果:
在这里插入图片描述

时间间隔

age(timestamp, timestamp):计算两个时间差
age(timestamp):只输入一个参数,计算current_date与入参的时间间隔。

select age(timestamp '2021-04-10', timestamp '2021-04-1'),age(timestamp '2021-04-1');

结果:
在这里插入图片描述

时间字段的截取

EXTRACT(field FROM source)函数:field 表示取的时间对象,source 表示取的日期来源,类型为 timestamp、time 或 interval。

对象解释
century世纪
year
decade得到年份除10的值
millennium得到第几个千年,0-1000第一个,1001-2000第二个,2001-3000第三个
quarter季度
month月份
week返回当前是几年的第几个周
dow返回当前日期是周几,周日:0,周一:1,周二:2,…
day本月的第几天
doy本年的第几天
hour小时
min得到时间中的分钟
sec返回时间中的秒
epoch获取到从1970-01-01 00:00:00 UTC这个Linux纪元年的开始时间到给定的日期或者时间戳参数的时间之间相隔的秒数
SELECT EXTRACT
	( century FROM now( ) ),
	EXTRACT ( YEAR FROM now( ) ),
	EXTRACT ( decade FROM now( ) ),
	EXTRACT ( millennium FROM now( ) ),
	EXTRACT ( quarter FROM now( ) ),
	EXTRACT ( MONTH FROM now( ) ),
	EXTRACT ( week FROM now( ) ),
	EXTRACT ( dow FROM now( ) ),
	EXTRACT ( DAY FROM now( ) ),
	EXTRACT ( doy FROM now( ) ),
	EXTRACT ( HOUR FROM now( ) ),
	EXTRACT ( MIN FROM now( ) ),
	EXTRACT ( sec FROM now( ) ),
	EXTRACT ( epoch FROM now( ) );

结果:
在这里插入图片描述

date_part(text, timestamp):获取子域(等效于extract),其中text可以为year,month,day,hour,minute,second等
date_part(text, interval):获取子域(等效于extract),其中text可以为year,month,day,hour,minute,second等

select date_part('hour', timestamp '2001-02-16 20:38:40'),date_part('month', interval '2 years 3 months');

结果:在这里插入图片描述
date_trunc(text, timestamp):截断成指定的精度,指定精度后面的子域用0补充.其中text可以为year,month,day,hour,minute,second等
date_trunc(text, interval):截取指定的精度,指定精度后面的子域用0补充.其中text可以为year,month,day,hour,minute,second等

select date_trunc('hour', timestamp '2001-02-16 20:38:40'),date_trunc('hour', interval '2 days 3 hours 40 minutes');

结果:
在这里插入图片描述

其它

isfinite(source):判断是否无穷大无穷小,source表示取的日期来源,类型为date、timestamp 或 interval

select isfinite(date'infinity'),isfinite(date'2013-1-1'),isfinite(timestamp '2001-02-16 21:28:30'),isfinite(interval '4 hours');

结果:
在这里插入图片描述
justify_days(interval):按照每月 30 天调整时间间隔
justify_hours(interval):按照每天 24 小时调整时间间隔
justify_interval(interval):使用justify_days和justify_hours调整时间间隔的同时进行正负号调整

select justify_days(interval '35 days'),justify_hours(interval '27 hours'),justify_interval(interval '1 mon -1 hour');

结果:
在这里插入图片描述

make_timestamp(year int, month int, day int, hour int, min int, sec double precision):从年、月、日、小时、分钟和秒字段中创建时间戳

select make_timestamp(2013, 7, 15, 8, 15, 23.5);

结果:
在这里插入图片描述
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ]):从年、月、日、小时、分钟和秒字段中创建带有时区的时间戳。 没有指定timezone时,使用当前的时区。

select make_timestamptz(2013, 7, 15, 8, 15, 23.5);

结果:
在这里插入图片描述
make_date(year int, month int, day int):为年、月和日字段创建日期

select make_date(2013, 7, 15);

结果:
在这里插入图片描述

make_time(hour int, min int, sec double precision):从小时、分钟和秒字段中创建时间

select make_time(8, 15, 23.5);

结果:
在这里插入图片描述
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0):从年、月、周、天、小时、分钟和秒字段中创建间隔

select make_interval(days := 10);

结果:
在这里插入图片描述
AT TIME ZONE:提供时区转换功能,有些时候,时区转换对于特定时间在不同时区显示特别有用。

SELECT now(),now() AT TIME ZONE 'GMT';

结果:
在这里插入图片描述

时间计算

interval 可以不写

SELECT
	now( ) + INTERVAL '2 years',--两年后
	now( ) + INTERVAL '1 month',--一个月后
	now( ) - INTERVAL '3 week',--三周前
	now( ) + '10 min';--十分钟后

结果:
在这里插入图片描述

SELECT DATE
	'2001-09-28' + INTEGER '7',
	DATE'2001-09-28' + INTERVAL '1 hour',
	DATE'2001-09-28' + TIME'03:00',
	INTERVAL '1 day' + INTERVAL '1 hour',
	TIMESTAMP '2001-09-28 01:00' + INTERVAL '23 hours',
	TIME'01:00' + INTERVAL '3 hours',
	- INTERVAL '23 hours',
	DATE'2001-10-01' - DATE'2001-09-28',
	DATE'2001-10-01' - INTEGER '7',
	DATE'2001-09-28' - INTERVAL '1 hour',
	TIME'05:00' - TIME'03:00',
	TIME'05:00' - INTERVAL '2 hours',
	TIMESTAMP '2001-09-28 23:00' - INTERVAL '23 hours',
	INTERVAL '1 day' - INTERVAL '1 hour',
	TIMESTAMP '2001-09-29 03:00' - TIMESTAMP '2001-09-27 12:00',
	900 * INTERVAL '1 second',
	21 * INTERVAL '1 day',
	DOUBLE PRECISION '3.5' * INTERVAL '1 hour',
	INTERVAL '1 hour' / DOUBLE PRECISION '1.5';

今人不见古时月,今月曾经照古人。____李白《把酒问月·故人贾淳令予问之》

  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PostgreSQL中,有许多有用的时间函数可以帮助我们进行日期和时间的处理。其中一些常见的时间函数包括: 1. `now()`函数可以返回当前的日期和时间。 2. `current_date`函数用于返回当前日期。 3. `current_time`函数用于返回当前时间。 4. `localtime`函数用于返回当前本地时间。 5. `current_timestamp`函数用于返回当前的时间戳。 此外,PostgreSQL还提供了一些用于处理时间的加减的函数。例如: ``` select now() + interval '2 years'; select now() + interval '2 year'; select now() + interval '2 y'; select now() + interval '2 Y'; select now() + interval '2Y'; ``` 这些函数可以让我们对日期和时间进行加减操作,非常方便。通过使用这些时间函数,我们可以轻松地处理和操作日期和时间数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PostgreSQL日期/时间函数(兼容oracle)](https://download.csdn.net/download/weixin_38499553/13684201)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PostgreSQL的日期/时间函数](https://blog.csdn.net/Super_King_/article/details/121521421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值