如何使用 PostgreSQL 在 DML 中更改计算属性的数据类型?
How do I change the data type of a calculated attribute in DML with PostgreSQL?
知道可以使用SQL数据定义语言(DDL)Server Postgres(SP):
- 创建
- 改变
- 放弃
并且对于 SQL 数据操作语言 (DML) SP:
- SELECT
- 插入
- 更新
- 删除
当我们创建一个 SELECT
时,我们投影的属性会出现在 DDL 中建立的数据类型中。并且当用2个相同类型的属性执行操作生成一个在SELECT
中计算的属性时,类型将与操作数的类型相同但我需要更改它。
我的问题是我想计算两种数据之间的平均值:A / B * 100 bigint
但是当我这样做时 A/B我在计算字段中获得 0,因为我还需要十进制值将它们乘以 100
以下 sql 指令不适用于 bigint
:
SELECT id, a/b
FROM <mytable>;
计算字段中的这个 returns 0 值对我来说是我想要避免的。
而我想要的是:
SELECT id, first_operand * 100
FROM (SELECT id, a/b TYPE <newtype> AS first_operand
FROM <mytable>) firstTable
NATURAL JOIN <mytable>;
所以我想知道的是如何更改 SELECT
投影中的数据类型,或者我有什么方法可以做到这一点?
在 Postgres 中,您可以轻松地 cast 通过将 ::<type to cast to>
附加到表达式。所以在你的情况下,你可以尝试 a::decimal / b::decimal
得到 a / b
的结果是 decimal
。 (实际上,如果您不喜欢那么冗长的话,这里只转换一个操作数就足够了。)
您可以使用以下方式进行类型转换:
cast function i.e. CAST ( expression AS type )
或者:
PostgreSQL type cast :: i.e. expression::type
知道可以使用SQL数据定义语言(DDL)Server Postgres(SP):
- 创建
- 改变
- 放弃
并且对于 SQL 数据操作语言 (DML) SP:
- SELECT
- 插入
- 更新
- 删除
当我们创建一个 SELECT
时,我们投影的属性会出现在 DDL 中建立的数据类型中。并且当用2个相同类型的属性执行操作生成一个在SELECT
中计算的属性时,类型将与操作数的类型相同但我需要更改它。
我的问题是我想计算两种数据之间的平均值:A / B * 100 bigint
但是当我这样做时 A/B我在计算字段中获得 0,因为我还需要十进制值将它们乘以 100
以下 sql 指令不适用于 bigint
:
SELECT id, a/b
FROM <mytable>;
计算字段中的这个 returns 0 值对我来说是我想要避免的。
而我想要的是:
SELECT id, first_operand * 100
FROM (SELECT id, a/b TYPE <newtype> AS first_operand
FROM <mytable>) firstTable
NATURAL JOIN <mytable>;
所以我想知道的是如何更改 SELECT
投影中的数据类型,或者我有什么方法可以做到这一点?
在 Postgres 中,您可以轻松地 cast 通过将 ::<type to cast to>
附加到表达式。所以在你的情况下,你可以尝试 a::decimal / b::decimal
得到 a / b
的结果是 decimal
。 (实际上,如果您不喜欢那么冗长的话,这里只转换一个操作数就足够了。)
您可以使用以下方式进行类型转换:
cast function i.e. CAST ( expression AS type )
或者:
PostgreSQL type cast :: i.e. expression::type