在 PostgreSQL 中将smallint 转换为布尔值

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

我正在尝试将 PostgreSQL 中的smallint 转换为布尔值。这并不是开箱即用的,例如:

select (1::smallint)::bool;

返回“错误:42846:无法将类型smallint转换为布尔值”

我可以使用以下方法修复此问题:

select (1::smallint)::int::bool;

但我想知道是否有一种方法可以定义如何将

smallint
直接投射到
boolean

原因是我(以及与我一起工作的其他人)有汇总查询,这些查询将数据库表中的

int
列转换为
boolean
。我想将此列更改为
smallint
,但这样做会破坏此逻辑,因为没有从
smallint
boolean
的直接转换。是否可以使用 postgres
CREATE CAST
来定义如何将
smallint
转换为
boolean

postgresql casting
3个回答
21
投票
CREATE OR REPLACE FUNCTION boolean1(i smallint) RETURNS boolean AS $$
    BEGIN
            RETURN (i::smallint)::int::bool;
    END;
$$ LANGUAGE plpgsql;

CREATE CAST (smallint AS boolean) WITH FUNCTION boolean1(smallint) AS ASSIGNMENT;

15
投票

我正在尝试:

ALTER TABLE mytable ALTER COLUMN mycol TYPE bool USING mycol::bool;

使用与“Ispirer SQLWays Migrations”的答案相同的方法(将smallint转换为int,然后转换为boolean)有效:

ALTER TABLE mytable ALTER COLUMN mycol TYPE bool USING mycol::int::bool;

0
投票

另一种选择是将整数转换为文本,然后转换为布尔值。

这不是一种直观的做事方式。 但它有效。


在 postgresql 中,你可以:

result_indicateur = var 整数, 值 = O 或 1

cast(result_indicateur::text as boolean)

result_indicateur|
-----------------+
true             |
----

“true”状态的有效文字值为: ‘1’ 对于“假”状态,可以使用以下值: ‘0’

来源:数据类型-布尔值

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