PostgreSQL | ||
---|---|---|
上一页 | 第六章. 类型转换 | 下一页 |
tgl=> select 2 ^ 3 AS "Exp"; Exp ----- 8 (1 row)分析器对两个参数都做类型转换,查询等效于:
tgl=> select float8(2) ^ float8(3) AS "Exp"; Exp ----- 8 (1 row)或
tgl=> select 2.0 ^ 3.0 AS "Exp"; Exp ----- 8 (1 row)
注意:最后的形式最高效,因为不用调用函数做隐含类型转换.这对小查询没有什么影响,但可能对那些操作大表的查询的性能产生较大影响.
有一个未声明的参数:
tgl=> SELECT text 'abc' || 'def' AS "Text and Unknown"; Text and Unknown ------------------ abcdef (1 row)本例中分析器寻找一个两个参数都是 text 的操作符.因为有一个这样的操作符,它认为另一个参数的类型是text.
联接未声明类型:
tgl=> SELECT 'abc' || 'def' AS "Unspecified"; Unspecified ------------- abcdef (1 row)本例中对类型的初始值没有任何暗示,因为查询中没有声明任何类型.因此,分析器查找所有参数都是字符串类的候选操作符.并且它选择"优选类型",text,作为本查询字符串类的类型.
注意: 如果用户定义了一个新的数据类型,并且定义了用于该类型的操作符“||”,那么本查询将不会象上面写的那样成功完成.这时分析器会因为现在有两类候选操作符而无法决定使用哪个.
tgl=> select (4.3 !); ?column? ---------- 24 (1 row)
注意: 这样做当然会导致一个数学上有疑问的结果,因为非整数的阶乘原则没有定义.但是,数据库的角色不是数学教学,而是数据操作.如果用户一定要进行浮点数的阶乘,Postgres 将尽可能服从.
上一页 | 首页 | 下一页 |
类型转换 | 开头 | 函数 |