【问题标题】:Interval field in PostgresqlPostgresql 中的区间字段
【发布时间】:2021-07-12 14:38:15
【问题描述】:

这些命令有什么区别?

ALTER TABLE podcast_episodes ADD COLUMN duration interval;

ALTER TABLE podcast_episodes ADD COLUMN duration interval SECOND(0);

ALTER TABLE podcast_episodes ADD COLUMN duration interval SECOND;

我想存储一个播客剧集的持续时间,然后用 first_mark 和 last_mark 来计算 podcast_playback_history 以计算整个剧集收听的百分比。

文档说

interval 类型有一个附加选项,即通过编写以下短语之一来限制存储字段的集合:

年份

一天

小时

分钟

第二

一年到一个月

一天到一天

一天到一分钟

第二天

一小时到一分钟

小时到秒

分秒

请注意,如果同时指定了字段和 p,则字段必须包含 SECOND,因为精度仅适用于秒。

如果我将它设置为第二个,会有额外的好处吗?它仍然是 16 字节还是会更少? 我尝试使用第二和第二(0),当我保存该行时,它仍然显示为“0 年 0 月 0 天 0 小时 0 分钟 2.00 秒”

【问题讨论】:

    标签: postgresql intervals seconds


    【解决方案1】:

    添加的fields 规范决定了如何解释未标记数量的字符串。

    The manual:

    当使用字段规范编写间隔常量时,或者当 将字符串分配给用 a 定义的间隔列 字段规范,未标记数量的解释 取决于领域。例如INTERVAL '1' YEAR 读为 1 年,而INTERVAL '1' 表示 1 秒。

    从不将这些修饰符用于类型定义。最好坚持默认间隔并避免混淆。始终在字符串文字(interval '13 seconds'interval '13 sec')中拼出数量名称,从不interval '13' - 添加类型修饰符的唯一情况。我不想依赖表定义来解释我的输入.尤其是对于这种不常用的功能。

    可选的精度修饰符(0) .. (6) 仅适用于秒,并且只允许与该字段规范一起使用。 The manual:

    请注意,如果同时指定 fieldsp,则 字段必须包含SECOND,因为精度仅适用于秒。

    它定义了在亚秒内存储多少十进制数字。如果您使用它(我会),请注意值是四舍五入,而不是截断(就像人们可能期望的那样)。

    test=> SELECT '13.555555 sec'::interval(3);
       interval   
    --------------
     00:00:13.556    -- !
    (1 row)
    
    test=> SELECT '13.555555 sec'::interval(0);
     interval 
    ----------
     00:00:14        -- !!!
    (1 row)
    

    演示:

    db小提琴here

    如果我将其设置为second,是否有额外的好处?

    不,无论如何这是默认设置。 (我强烈建议坚持使用默认值以避免混淆。)

    仍然是 16 字节还是会更少?

    interval 值的大小总是 16 个字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2017-08-16
      • 2013-10-04
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多