信息发布→ 登录 注册 退出

PostgreSQL中的日期/时间函数详解

发布时间:2026-01-11

点击量:
目录
  • 零、前言
  • 一、获取当前时间
  • 二、时间的加减
  • 三、格式化函数
    • 3.1时间转字符串
    • 3.2字符串转日期
    • 3.3字符串转时间
    • 3.4Unix时间戳转时间
  • 四、一些重要函数
    • 4.1时间间隔
    • 4.2时间截取
  • 五、时间的转换
    • 六、收!

      零、前言

      公司里有一台阿里云RDS数据库用了PPAS(Postgres PlusTM Advanced Server),在处理日期/时间时遇到一些问题,花了点时间整理如下。

      一、获取当前时间

      • select now()
      • select current_timestamp
      • select localtimestamp
      • select clock_timestamp()

      有时候,我们不需要这么完整细致的时间,自然就有

      • select current_date
      • select current_time
      • select localtime

      二、时间的加减

      老实说,这是见过最奇怪的一套时间计算的方式了。

      select now() + interval '2 years';
      select now() + interval '2 year'; 
      select now() + interval '2 y';
      select now() + interval '2 Y';
      select now() + interval '2Y';

      结果都是一样的:

      interval部分可以不写,以此类推,月、日、小时、分钟、秒的加减计算也同理。

      AbbreviationMeaning
      YYears
      MMonths (in the date part)
      WWeeks
      DDays
      HHours
      MMinutes (in the time part)
      SSeconds

      值得一提的是单写M会默认为分钟的加减,针对月的加减建议写完整的month或months或者简写mon。

      三、格式化函数

      3.1时间转字符串

      to_char(timestamp,text)

      3.2字符串转日期

      to_date(text,text)

      3.3字符串转时间

      to_timestamp(text,text)

      3.4Unix时间戳转时间

      to_timestamp(unixtime)

      关于时间格式的模式,丢表跑:

      模式描述
      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)(第一周从该年的第一天开始)

      四、一些重要函数

      4.1时间间隔

      age(timestamp, timestamp)

      当然也可以只输入一个参数,计算current_date与入参的时间间隔。

      4.2时间截取

      date_part(text, timestamp)
      extract(field from timestamp)

      还可以截断至指定精度

      date_trunc(text, timestamp)

      如图所示,小时后的分和秒被置为0。

      五、时间的转换

      select timestamp '2012-05-12 18:54:54';  --2012-05-12 18:54:54
      select date '2012-05-12 18:54:54';       --2012-05-12
      select time  '2012-05-12 18:54:54';      --18:54:54
      select TIMESTAMP WITH TIME ZONE '2012-05-12 18:54:54'   
      --2012-05-12 18:54:54+08
      
      --与unix时间戳的转换
      SELECT TIMESTAMP 'epoch' + 1341174767 * INTERVAL '1 second'; 
      --2012-07-01 20:32:47

      六、收!

      在线客服
      服务热线

      服务热线

      4008888355

      微信咨询
      二维码
      返回顶部
      ×二维码

      截屏,微信识别二维码

      打开微信

      微信号已复制,请打开微信添加咨询详情!