cast(TRUE as smallint)可以,但是cast('true'作为smallint)是ERR

时间:2017-04-10 12:07:16

标签: postgresql

我有一个只有1列的表,它有布尔类型。 这些都可以:

insert into bools values('true');
insert into bools values('t');
insert into bools values(TRUE);

没关系:

select cast(TRUE as smallint)

但这些是ERR:

select cast('true' as smallint)
select cast('t' as smallint)

为什么?

1 个答案:

答案 0 :(得分:0)

当你将't','true',1设置为布尔值时,Postgres可以猜出你的意思,但是当你尝试使用't'作为smallint时,它无法预见你的意思。我不推荐这样的方法,但你可能正在寻找的是

select 't'::boolean::int

t=# select cast(cast('t' as boolean) as int);
 int4
------
    1
(1 row)