PolarDB PostgreSQL版(兼容Oracle)支持Oracle兼容的64位DATE类型。

注意事项

  • 在内核小版本V1.1.29(发布时间:2022年12月)及以上版本中创建的集群支持该功能。存量集群,不支持该功能。
  • 需要搭配使用PolarDB最新版本的JDBC驱动,JDBC驱动版本需要42.2.9.1.2及以上,否则可能会出现精度丢失的问题。如何下载以及查看PolarDB-JDBC版本,请参见JDBC

简介

与旧版本相比,新版本主要的兼容性变化分为以下三方面:

  • DATE类型相减是numeric类型,不再是interval类型。
    • 在旧版本中,DATE类型相减是interval类型。
      select pg_typeof(sysdate - sysdate) from dual;
      显示结果如下:
       pg_typeof
      -----------
       interval
      (1 row)
    • 在新版本中,DATE类型相减是numeric类型。
      select pg_typeof(sysdate - sysdate) from dual;
      显示结果如下:
       pg_typeof
      -----------
       numeric
      (1 row)
  • DATE类型对于更高精度的输入,会进行精度截断。
    • 在旧版本中,对于更高精度的输入,没有进行秒之后的精度截断。
      select to_date('2021-10-31 10:31:31.7777') - to_date('2021-10-31 10:31:31') from dual;
      显示结果如下:
         ?column?
      ---------------
       00:00:00.7777
      (1 row)
    • 在新版本中,对于更高精度的输入,会进行秒之后的精度截断。
      select to_date('2021-10-31 10:31:31.7777') - to_date('2021-10-31 10:31:31') from dual;
      显示结果如下:
       ?column?
      ----------
              0
      (1 row)
  • 支持通过设置nls_date_format来控制DATE类型的展示。
    • nls_date_format设置为'yyyy/mm/dd hh24:mi:ss',并查询DATE类型。
      set nls_date_format = 'yyyy/mm/dd hh24:mi:ss';
      select sysdate from dual;
      显示结果如下:
             sysdate
      ---------------------
       2022/12/06 09:13:59
      (1 row)
    • nls_date_format设置为'yyyy-mm-dd hh24:mi:ss',并查询DATE类型。
      set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
      select sysdate from dual;
      显示结果如下:
             sysdate
      ---------------------
       2022-12-06 09:14:31
      (1 row)