主要问题
我想知道使用双分号::声明类型与在Postgres中不使用::有什么区别。
示例
INTERVAL '1 day'
-- vs
'1 day'::INTERVAL还有很多问题..。
::型铸件吗?就像将字符串转换到INTERVAL.::的情况下调用第一个示例,还是不使用::来定义该数据类型?H 220H 121这种方法对Postgres是唯一的,还是同样适用于SQL?H 222F 223很抱歉有这么多问题!
发布于 2019-10-11 02:03:51
我可能会将INTERVAL '1 day'称为区间文字。这意味着,在没有任何强制转换的情况下,它表示一个文本Postgres INTERVAL值。另一方面,'1 day'::INTERVAL实际上是文本1 day的强制转换,以使其成为INTERVAL值。
::转换语法不是ANSI标准的一部分,而是特定于Postgres的。请注意,CAST('1 day' AS INTERVAL)与使用双冒号'1 day'::INTERVAL语法大致相同。
如果您担心有一天可能会将Postgres代码移植到另一个数据库,那么您可能会坚持使用CAST() over ::,后者在大多数其他数据库中都是支持的。
就性能而言,INTERVAL '1 day'不要求Postgres执行任何显式强制转换操作,而CAST或::则需要显式强制转换。可能会有一些小的性能差异。
https://stackoverflow.com/questions/58333259
复制相似问题