我正在尝试将 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
?
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;
我正在尝试:
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;
另一种选择是将整数转换为文本,然后转换为布尔值。
这不是一种直观的做事方式。 但它有效。
在 postgresql 中,你可以:
result_indicateur = var 整数, 值 = O 或 1
cast(result_indicateur::text as boolean)
result_indicateur|
-----------------+
true |
----
“true”状态的有效文字值为: ‘1’ 对于“假”状态,可以使用以下值: ‘0’
来源:数据类型-布尔值