文章摘要
这篇文章总结了PostgreSQL中处理时间的主要方法和函数,包括获取当前时间、分解时间、格式化日期、时间运算以及计算时间差等。文章详细介绍了以下几个关键部分: 1. **获取当前时间** - 使用`now()`函数返回当前时间。 - 使用`current_timestamp`和`current_date`等函数获取不同时间部分。 2. **分解时间** - 使用`date_part`函数提取时间的各个部分,如年份、月份、日期、小时、分钟、秒、毫秒等。 - 通过`extract`函数快速获取特定时间字段。 3. **格式化日期** - 使用`to_char`将时间戳转换为字符串格式。 - 使用`to_date`和`to_timestamp`将字符串格式的时间转换为日期或时间戳。 4. **时间运算** - 可以对日期、时间、时间戳和时间间隔进行加减操作,支持多种时间单位的计算。 - 通过加减时间间隔可以轻松处理日期和时间的运算。 5. **时间差计算** - 使用`interval`运算符计算时间差,并支持将时间差转换为秒、分钟、小时等单位。 文章通过具体的示例展示了如何灵活运用这些函数和运算符,帮助用户高效地处理PostgreSQL中的时间相关问题。
目录1.获取当前时间2.date_part函数3.extract()函数4.日期格式化函数5.时间运算6.计算时间差总结
now()函数:
select now();

current_timestamp,同now():
select current_timestamp;

select current_time;

select current_date;

可以去掉now()、掉后面的+8等:
select now()::timestamp(0)without time zone;
select current_timestamp::timestamp(0)without time zone;
select current_timestamp::timestamp(0)without time zone;

语法:DATE_PART(field, source), filed可以理解为要截取的类型。
下面是filed支持的类型:
CENTURY,世纪,获取日期所在的世纪:
select date_part(‘CENTURY’, TIMESTAMP ‘2022-12-16 12:21:13’);
select date_part(‘CENTURY’, now());
select date_part(‘CENTURY’, now());

MILLENNIUM,千年
select date_part(‘MILLENNIUM’, timestamp ‘2022-12-16 13:21:15’);

YEAR,年份域
select date_part(‘YEAR’, timestamp ‘2022-12-16 13:21:15’);

MONTH,对于timestamp数值,它是一年里的月份数(1-12);对于interval数值,它是月的数目,然后对12取模(0-11)
select date_part(‘MONTH’, timestamp ‘2022-12-16 13:21:15’);

select date_part(‘month’, interval ‘2 years 5 months’)

DAY,日期里的天,值是1-31:
select date_part(‘day’, TIMESTAMP ‘2022-12-16 12:21:13’);
select date_part(‘day’, now());
select date_part(‘day’, now());

HOUR,小时(0-23)
select date_part(‘HOUR’, TIMESTAMP ‘2022-12-16 12:21:13’);

MINUTE,分钟域(0-59)
select date_part(‘MINUTE’, TIME ‘2022-12-16 13:21:15’);

SECOND,秒域,包括小数部分(0-59[1])
select date_part(‘SECOND’, timestamp ‘2022-12-16 13:21:15’);

MICROSECONDS,秒域(包括小数)乘以 1,000,000

select date_part(‘MICROSECONDS’, TIME ‘2022-12-16 13:21:15’);

MILLISECONDS,秒域(包括小数)乘以 1,000
select date_part(‘MILLISECONDS’, timestamp ‘2022-12-16 13:21:15’);

DECADE,年份域除以10:
select date_part(‘DECADE’, TIMESTAMP ‘2022-12-16 12:21:13’);

DOW,星期号(0-6;星期天是0) (仅用于timestamp)
select date_part(‘DOW’, TIMESTAMP ‘2022-12-16 12:21:13’);
select date_part(‘DOW’, now());
select date_part(‘DOW’, now());

DOY,一年中的第几天(1 -365/366) (仅用于 timestamp)
select date_part(‘DOY’, TIMESTAMP ‘2022-12-16 12:21:13’);

QUARTER,该天所在的该年的季度(1-4)(仅用于 timestamp)
select date_part(‘QUARTER’, timestamp ‘2022-12-16 13:21:15’);

WEEK,该天在所在的年份里是第几周。
select date_part(‘WEEK’, timestamp ‘2022-12-16 13:21:15’);

使用语法:extract (field from source),field 支持的类型,和date_part()函数一样
select extract (‘year’ from timestamp ‘2022-12-16 13:21:15’)

to_char(timestamp, text),把时间戳转换成字串
select to_char(now(), ‘YYYY-MM-DD HH24:MI:SS’)

to_date(text, text) 把字串转换成日期
select to_date(’05 Dec 2022′, ‘DD Mon YYYY’)

to_timestamp(text, text) ,把字串转换成时间戳
select to_timestamp(’05 Dec 2022′, ‘DD Mon YYYY’)

select date ‘2001-09-28’ + integer ‘7’;
select date ‘2001-09-28’ + interval ‘1 hour’;
select date ‘2001-09-28′ + time ’03:00’;
select interval ‘1 day’ + interval ‘1 hour’;
select timestamp ‘2001-09-28 01:00′ + interval ’23 hours’;
select time ’01:00′ + interval ‘3 hours’;
select – interval ’23 hours’;
select date ‘2001-10-01’ – date ‘2001-09-28’;
select date ‘2001-10-01’ – integer ‘7’;
select date ‘2001-09-28’ – interval ‘1 hour’;
select time ’05:00′ – time ’03:00′;
select time ’05:00′ – interval ‘2 hours;
select timestamp ‘2001-09-28 23:00′ – interval ’23 hours’;
select interval ‘1 day’ – interval ‘1 hour’;
select timestamp ‘2001-09-29 03:00’ – timestamp ‘2001-09-27 12:00’;
select interval ‘1 hour’ * double precision ‘3.5’;
select interval ‘1 hour’ / double precision ‘1.5’;
select date ‘2001-09-28’ + interval ‘1 hour’;
select date ‘2001-09-28′ + time ’03:00’;
select interval ‘1 day’ + interval ‘1 hour’;
select timestamp ‘2001-09-28 01:00′ + interval ’23 hours’;
select time ’01:00′ + interval ‘3 hours’;
select – interval ’23 hours’;
select date ‘2001-10-01’ – date ‘2001-09-28’;
select date ‘2001-10-01’ – integer ‘7’;
select date ‘2001-09-28’ – interval ‘1 hour’;
select time ’05:00′ – time ’03:00′;
select time ’05:00′ – interval ‘2 hours;
select timestamp ‘2001-09-28 23:00′ – interval ’23 hours’;
select interval ‘1 day’ – interval ‘1 hour’;
select timestamp ‘2001-09-29 03:00’ – timestamp ‘2001-09-27 12:00’;
select interval ‘1 hour’ * double precision ‘3.5’;
select interval ‘1 hour’ / double precision ‘1.5’;

select now() + interval ’10 min/year/month/day/hour/sec/ (1 year 1 month 1 day 1 hour 1 min 1 sec)’
select now() – interval ’10 min/year/month/day/hour/sec/ (1 year 1 month 1 day 1 hour 1 min 1 sec)’
select now()::timestamp(0)without time zone-interval ’72 hour’
select extract(day from now() – ‘2001-09-27 12:00’) from user ;
select now() – interval ’10 min/year/month/day/hour/sec/ (1 year 1 month 1 day 1 hour 1 min 1 sec)’
select now()::timestamp(0)without time zone-interval ’72 hour’
select extract(day from now() – ‘2001-09-27 12:00’) from user ;

到此这篇关于pgsql时间处理的一些常用方式总结的文章就介绍到这了,更多相关pgsql时间处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:PostgreSQL 如何获取当前日期时间及注意事项postgresql中时间转换和加减操作PostgreSQL中常用的时间日期脚本使用教程PostgreSQL中的日期/时间函数详解postgresql 计算时间差的秒数、天数实例postgresql 实现查询某时间区间的所有日期案例
© 版权声明
文章版权归作者所有,未经允许请勿转载。


