如果我执行查询:
SELECT '10' AS a_name;
,它会给出 10 AS text 类型。
如果查询:SELECT 10::text AS a_name;
,它会再次给出 10 作为 text。
因此,可以预期以下两个查询会给出相同的结果:
SELECT '10'::interval day;
SELECT 10::text::interval day;
尽管如此,第一个查询给出了
10 days
,第二个查询给出了 00:00:00
。两种类型的间隔。
请解释为什么 SELECT '10'
和 SELECT 10::text
即使它们都给出相同的磁带和值,也会以不同的方式解释,或者我的理解错误在哪里。
行为上的差异是因为两个表达式
'10'
和 '10'::TEXT
在数据库中语义上并不等效。在表达式 '10'::INTERVAL DAY
中,'10'
是未知类型的符号,然后将其转换为 INTERVAL DAY
。在表达式 '10'::TEXT::INTERVAL DAY
中,'10'
又是一个未知类型的符号,在转换为 TEXT
之前先转换为 INTERVAL DAY
。 '10'
在客户端中显示为 TEXT
类型的原因是,当结果返回给客户端时,从未知类型隐式转换为 TEXT
。