Sql Postgres数据类型声明和类型,什么';双冒号和不冒号的区别是什么 主要问题

Sql Postgres数据类型声明和类型,什么';双冒号和不冒号的区别是什么 主要问题,sql,postgresql,types,casting,Sql,Postgresql,Types,Casting,我想知道在Postgres中使用双分号::声明类型与不使用::声明类型有什么区别 例子 间隔“1天” --vs “1天”::间隔 还有很多问题。。。 是类型转换吗?类似于将字符串强制转换为间隔 如果不使用::,您会将第一个示例称为什么?或者,如果不使用强制转换,您是如何定义该数据类型的 使用其中一个比另一个有什么好处吗 一个先介绍另一个吗 有速度优势吗 在社区中,一种方法是否标准化并优于另一种方法 是否有社区风格的指南文档 这是Postgres独有的,还是同样适用于SQL 很抱歉问了这么多

我想知道在Postgres中使用双分号
::
声明类型与不使用
::
声明类型有什么区别

例子
间隔“1天”
--vs
“1天”::间隔
还有很多问题。。。
  • 是类型转换吗?类似于将字符串强制转换为
    间隔

  • 如果不使用
    ::
    ,您会将第一个示例称为什么?或者,如果不使用强制转换,您是如何定义该数据类型的

  • 使用其中一个比另一个有什么好处吗

  • 一个先介绍另一个吗

  • 有速度优势吗

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

  • 是否有社区风格的指南文档

  • 这是Postgres独有的,还是同样适用于SQL


很抱歉问了这么多问题

我可以将
间隔“1天”
称为间隔文字。这意味着,在没有任何强制转换的情况下,它会声明一个文字Postgres
INTERVAL
值。另一方面,
'1day':INTERVAL
实际上是文本
1day
的一个转换,使其成为
INTERVAL

强制转换语法不是ANSI标准的一部分,而是专为Postgres设计的。请注意,
CAST('1天'作为间隔)
与使用双冒号
'1天':INTERVAL
语法大致相同

如果您担心有一天可能要将Postgres SQL代码移植到另一个数据库,那么您可能会坚持使用
CAST()
而不是
,大多数其他数据库都支持前者


就性能而言,
INTERVAL'1 day'
不要求Postgres执行任何显式强制转换操作,而
CAST
确实需要显式强制转换。可能会有一些小的性能差异。

现在看到
literal
我觉得很傻。这是我在脑海中找不到的一个词:
type literal
注意
interval'1 day'
是标准ANSI SQL
interval'1'day的一个特定于Postgres的变体