postgresql timestamp该如何使用

1,postgresql timestamp在表中的原始数据是数值还是格式化好的时间字符串?
2,如果是格式化的字符串,那他自己排序是不是性能很差?
3,如果是数值,可否直接按照数值查出来呢?

阅读 9.7k
2 个回答
  1. TIMESTAMP类型在表中存储的内部形式是一个8字节数值, 可表示的时间范围是 公元前4713年~公元294276年,最小单位是微妙(microsecond)
  2. 因为是数值,所以你不用担心其排序性能
  3. 这个问题比较复杂

    TIMESTAMP类型虽然是一个8字节数值,但是为了向用户屏蔽内部细节,它的输出都是以字符串的形式来输出时间戳的(时间戳的格式可以指定)。从道理上,PG社区并不希望直接把内部数值暴露到外部。

    如果非要以数值类型查出来,目前好像也没有办法能够查到其原始的8字节数值,但是可以通过下述方法"曲线救国" —— 即把TIMESTAMP类型转换为Unix时间戳(1970 年 1 月 1 日(00:00:00 GMT)以来)后以整型显示:

    假设有下面一张表

    CREATE TABLE foobar (col1 INTEGER, col2 TIMESTAMP);

    那么想以所谓的数值形式查询col2的值的SQL语句如下:

    SELECT CAST(EXTRACT(EPOCH FROM col2) AS INTEGER) FROM foobar;

    关于EPOCH的用法可以参照手册9.9. Date/Time Functions and Operators

PostgreSQL 提供 timestamp 数据类型。

https://www.postgresql.org/do...

所以不要以字符串或者整数存储 timestamp 数据,会带来存储和查询性能上的代价。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进