代码之家  ›  专栏  ›  技术社区  ›  CTS_AE

postgres数据类型声明和类型,双冒号和不

  •  0
  • CTS_AE  · 技术社区  · 5 年前

    主要问题

    我想知道用双分号声明一个类型有什么区别 :: 是,vs 使用 :: 在博士后。

    例子

    INTERVAL '1 day'
    -- vs
    '1 day'::INTERVAL
    

    还有很多问题…

    • :: 类型转换?就像把一根绳子 INTERVAL 是的。

    • 你认为第一个例子是什么 没有 使用 :: ,或者就是这样定义数据类型而不强制转换?

    • 一个比另一个有用吗?

    • 一个比另一个先介绍?

    • 有速度优势吗?

    • 在社区内,一种方法是否标准化并优于另一种方法?

    • 有社区风格的指导方针文件吗?

    • 这是postgres独有的,还是同样适用于sql?

    对不起,所有的问题!

    1 回复  |  直到 5 年前
        1
  •  1
  •   Tim Biegeleisen    5 年前

    我可以参考 INTERVAL '1 day' 作为间隔 字面意义的 是的。这意味着,如所写,没有任何铸造,它陈述了一个字面上的后记 INTERVAL 价值。另一方面, '1 day'::INTERVAL 实际上是 铸造 文本的 1 day 使之成为 间隔 价值。

    这个 :: 强制转换语法不是ansi标准的一部分,而是postgres特有的。请注意 CAST('1 day' AS INTERVAL) 与使用双冒号大致相同 “1天”::间隔 语法。

    如果您担心有朝一日可能会将postgres sql代码移植到另一个数据库,那么您可以坚持使用 CAST() 结束 :: ,大多数其他数据库都支持前者。

    在性能方面, 间隔“1天” 不需要postgres执行任何显式转换操作,而 CAST :: 需要显式转换。可能会有一些小的性能差异。