在 PostgreSQL 中将整数转换(转换)为区间

问题描述 投票:0回答:1

如果我执行查询:

SELECT '10' AS a_name;
,它会给出 10 AS text 类型。 如果查询:
SELECT 10::text AS a_name;
,它会再次给出 10 作为 text。 因此,可以预期以下两个查询会给出相同的结果:

  1. SELECT '10'::interval day;
  2. SELECT 10::text::interval day;

尽管如此,第一个查询给出了

10 days
,第二个查询给出了
00:00:00
。两种类型的间隔。 请解释为什么
SELECT '10'
SELECT 10::text
即使它们都给出相同的磁带和值,也会以不同的方式解释,或者我的理解错误在哪里。

postgresql casting integer intervals
1个回答
0
投票

行为上的差异是因为两个表达式

'10'
'10'::TEXT
在数据库中语义上并不等效。在表达式
'10'::INTERVAL DAY
中,
'10'
是未知类型的符号,然后将其转换为
INTERVAL DAY
。在表达式
'10'::TEXT::INTERVAL DAY
中,
'10'
又是一个未知类型的符号,在转换为
TEXT
之前先转换为
INTERVAL DAY
'10'
在客户端中显示为
TEXT
类型的原因是,当结果返回给客户端时,从未知类型隐式转换为
TEXT

© www.soinside.com 2019 - 2024. All rights reserved.