网站推广分销系统,pyhton做网站,可以直接做室内su的网站,装修公司哪家好兰州的文章目录 前言查看时区修改时区时间/日期操作符和函数时间/日期操作符日期/时间函数#xff1a;extract#xff0c;date_part函数支持的field 数据类型格式化函数用于日期/时间格式化的模式#xff1a; 扩展 前言
本文基于 PostgreSQL 12.6 版本#xff0c;不同版本的函数… 文章目录 前言查看时区修改时区时间/日期操作符和函数时间/日期操作符日期/时间函数extractdate_part函数支持的field 数据类型格式化函数用于日期/时间格式化的模式 扩展 前言
本文基于 PostgreSQL 12.6 版本不同版本的函数可能存在差异。
查看版本 psql --version。 查看时区
show timezone; --UTC
select now(); -- 2023-07-24 09:22:48.589640 00:00视图 pg_timezone_names 保存了所有可供选择的时区
select * from pg_timezone_names;查询 PRC 时区
select * from pg_timezone_names where name PRC;PRC是指中华人民共和国 PRCPeople’s Republic of China。
修改时区
修改时区设置成东八区 北京时间 UTC8默认为session级配置
set time zone PRC;
select now(); -- 2023-07-24 17:21:05.086183 08:00修改时区用户级配置
alter role rolname set timezoneUTC; -- 修改指定角色时区(rolname为角色名)
alter role all set timezoneUTC; -- 修改所有角色时区修改时区数据库级配置
alter database dbname set timezoneUTC; -- dbname为数据库名称时间/日期操作符和函数
时间/日期操作符
操作符例子返回类型结果select date ‘2023-07-24’ integer ‘7’;date2023-07-31select date ‘2023-07-24’ interval ‘1 hour’;timestamp2023-07-24 01:00:00.000000select date ‘2023-07-24’ time ‘15:16’;timestamp2023-07-24 15:16:00.000000select interval ‘1 day’ interval ‘1 hour’;interval0 years 0 mons 1 days 1 hours 0 mins 0.0 secsselect timestamp ‘2023-07-24 15:16’ interval ‘23 hours’;timestamp2023-07-25 14:16:00.000000select time ‘01:00’ interval ‘3 hours’;time04:00:00-select - interval ‘23 hours’;interval0 years 0 mons 0 days -23 hours 0 mins 0.0 secs-select date ‘2023-07-24’ - date ‘2023-07-22’;integer2-select date ‘2023-07-24’ - integer ‘7’;date2023-07-17-select date ‘2023-07-24’ - interval ‘1 hour’;timestamp2023-07-23 23:00:00.000000-select time ‘05:00’ - time ‘03:00’;interval0 years 0 mons 0 days 2 hours 0 mins 0.0 secs-select time ‘05:00’ - interval ‘2 hours’;time03:00:00-select timestamp ‘2023-07-24 23:00’ - interval ‘23 hours’;timestamp2023-07-24 00:00:00.000000-select interval ‘1 day’ - interval ‘1 hour’;interval0 years 0 mons 1 days -1 hours 0 mins 0.0 secs-select timestamp ‘2023-07-24 03:00’ - timestamp ‘2023-07-24 12:00’;interval0 years 0 mons 0 days -9 hours 0 mins 0.0 secs*select interval ‘1 hour’ * double precision ‘3.5’;interval0 years 0 mons 0 days 3 hours 30 mins 0.0 secs/select interval ‘1 hour’ / double precision ‘1.5’;interval0 years 0 mons 0 days 0 hours 40 mins 0.0 secs
日期/时间函数
函数描述例子返回类型结果age(timestamp, timestamp)第1个timestamp 减去 第2个timestampselect age(‘2023-07-24’, ‘1997-10-26’);interval25 years 8 mons 29 days 0 hours 0 mins 0.0 secsage(timestamp)从current_date 减去 timestamp的值select age(timestamp ‘1997-10-26’);interval25 years 8 mons 29 days 0 hours 0 mins 0.0 secscurrent_date今天的日期select current_date;date2023-07-24current_time现在的时间select current_time;time07:53:43.911756 00:00current_timestamp日期和时间select current_timestamp;timestamp2023-07-24 07:54:19.495372 00:00date_part(text, timestamp)获取子域(等效于extract)select date_part(‘hour’, timestamp ‘2023-07-24 15:56:34’);double15date_part(text, interval)获取子域(等效于extract)select date_part(‘month’, interval ‘2 years 3 months’);double3date_trunc(text, timestamp)截断成指定的精度select date_trunc(‘hour’, timestamp ‘2023-07-24 15:56:34’);timestamp2023-07-24 15:00:00.000000extract(field from timestamp)获取子域select extract(hour from timestamp ‘2023-07-24 15:56:34’);double15extract(field from interval)获取子域select extract(month from interval ‘2 years 3 months’);double3localtime当前时间select localtime;time08:00:08localtimestamp当前日期和时间select localtimestamp;timestamp2023-07-24 08:05:03.650472now()当前的日期和时间(等效于current_timestamp)select now();timestamp2023-07-24 08:09:30.828408 00:00timeofday()当前日期和时间select timeofday();textMon Jul 24 08:09:51.870484 2023 UTC
extractdate_part函数支持的field
extractdate_part 这两个函数可以从日期时间值中提取指定的部分例如年份、月份、小时等。extract 是一个 PostgreSQL 特有的函数而 date_part 在标准 SQL 中也有定义但两者的功能类似。
域描述例子结果century世纪select extract(century from timestamp ‘2023-07-24 15:56:34’);21day(月份)里的日期域(1-31)select extract(day from timestamp ‘2023-07-24 15:56:34’);24decade年份域除以10select extract(decade from timestamp ‘2023-07-24 15:56:34’);202dow每周的星期号(0-6星期天是0) (仅用于timestamp)select extract(dow from timestamp ‘2023-07-24 15:56:34’);1doy一年的第几天(1 -365/366) (仅用于 timestamp)select extract(doy from timestamp ‘2023-07-24 15:56:34’);205epochUnix时间戳select extract(epoch from timestamp ‘2023-07-24 15:56:34’);1690214194hour小时域(0-23)select extract(hour from timestamp ‘2023-07-24 15:56:34’);15isodowISO 周几1-7其中1代表星期一select extract(isodow from timestamp ‘2023-07-24 15:56:34’);1isoyearISO 年份select extract(isoyear from timestamp ‘2023-07-24 15:56:34’);2023millennium千年((年份/1000)1)select extract(millennium from timestamp ‘2023-07-24 15:56:34’);3microseconds微秒select extract(microseconds from TIME ‘15:56:34.5’);34500000millisecond毫秒select extract(millisecon from TIME ‘15:56:34.5’);34500minute分钟(0-59)select extract(minute from timestamp ‘2023-07-24 15:56:34’);56month月份对于timestamp数值它是一年里的月份数(1-12)对于interval数值它是月的数目然后对12取模(0-11)select extract(month from timestamp ‘2023-07-24 15:56:34’);7quarter季度该天所在的该年的季度(1-4)(仅用于 timestamp)select extract(quarter from timestamp ‘2023-07-24 15:56:34’);3second秒域包括小数部分(0-59[1])select extract(second from timestamp ‘2023-07-24 15:56:34’);34week该天在所在的年份里是第几周。select extract(week from timestamp ‘2023-07-24 15:56:34’);30year年份域select extract(year from timestamp ‘2023-07-24 15:56:34’);2023
数据类型格式化函数
PostgreSQL格式化函数提供一套有效的工具用于把各种数据类型(日期/时间、integer、floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型。
to_char 函数第一个参数是待格式化的值而第二个是定义输出或输出格式的模板。
函数描述例子返回类型结果to_char(timestamp, text)把时间戳转换成字串select to_char(current_timestamp, ‘HH12:MI:SS’);text06:03:19to_char(interval, text)把时间间隔转为字串select to_char(interval ‘14h 6m 20s’, ‘HH24:MI:SS’);text14:06:20to_date(text, text)把字串转换成日期select to_date(‘25 Jul 2023’, ‘DD Mon YYYY’);date2023-07-24to_timestamp(text, text)把字串转换成时间戳select to_timestamp(‘25 Jul 2023’, ‘DD Mon YYYY’);timestamp2023-07-24 00:00:00.000000 00:00to_timestamp(double)把UNIX纪元转换成时间戳select to_timestamp(1690179888);timestamp2023-07-24 06:24:48.000000 00:00
用于日期/时间格式化的模式
模式描述HH一天的小时数(01-12)HH12一天的小时数(01-12)HH24一天的小时数(00-23)MI分钟(00-59)SS秒(00-59)MS毫秒(000-999)US微秒(000000-999999)AM正午标识(大写)Y,YYY带逗号的年(4和更多位)YYYY年(4和更多位)YYY年的后三位YY年的后两位Y年的最后一位MONTH全长大写月份名(空白填充为9字符)Month全长混合大小写月份名(空白填充为9字符)month全长小写月份名(空白填充为9字符)MON大写缩写月份名(3字符)Mon缩写混合大小写月份名(3字符)mon小写缩写月份名(3字符)MM月份号(01-12)DAY全长大写日期名(空白填充为9字符)Day全长混合大小写日期名(空白填充为9字符)day全长小写日期名(空白填充为9字符)DY缩写大写日期名(3字符)Dy缩写混合大小写日期名(3字符)dy缩写小写日期名(3字符)DDD一年里的日子(001-366)DD一个月里的日子(01-31)D一周里的日子(1-7周日是1)W一个月里的周数(1-5)(第一周从该月第一天开始)WW一年里的周数(1-53)(第一周从该年的第一天开始)
示例
-- 查询今天是今年的第几天
select to_char(now(), DDD); -- 205扩展
查询某个日期是否在某段日期范围可以使用 和 判断如果使用了 between 则前一个日期必须小于后一个日期。
示例
-- between 错误用法
select date 2023-07-24 between date(2023-07-25) - 1 and date(2023-07-25) - 7; -- false-- between 正确用法
select date 2023-07-24 between date(2023-07-25) - 7 and date(2023-07-25) - 1; -- true