| PostgreSQL | ||
|---|---|---|
| 上一页 | 第六章. 类型转换 | 下一页 |
函数评估
在 pg_proc 系统表里只定义了一个阶乘函数.所以下面的查询自动将 int2 参数转换成 int4:
tgl=> select int4fac(int2 '4');
int4fac
-------
24
(1 row)
实际上它被分析器转换成:
tgl=> select int4fac(int4(int2 '4'));
int4fac
-------
24
(1 row)
在pg_proc里定义了两个substr 函数.但是,其中只有一个使用两个参数,参数类型分别是text 和 int4.
如果其中一个字符串常量的类型不明确,其类型直接与唯一的候选函数匹配:
tgl=> select substr('1234', 3);
substr
------
34
(1 row)
如果该字符串定义为类型 varchar,就像大多数从表中取来的数据一样,分析器将试着将其转换成text:
tgl=> select substr(varchar '1234', 3);
substr
------
34
(1 row)
被分析器转换后变成:
tgl=> select substr(text(varchar '1234'), 3);
substr
------
34
(1 row)
注意:分析器中有一些搜索器用于优化 char,varchar, 和 text 类型之间的关系.这时,substr 将直接用 varchar 字符串调用,而不是在其中插入一个显式的类型转换调用.
而且,如果以 int4 为参数调用函数,分析器将试图将其转换成 text:
tgl=> select substr(1234, 3);
substr
------
34
(1 row)
实际上是这样执行的
tgl=> select substr(text(1234), 3);
substr
------
34
(1 row)
| 上一页 | 首页 | 下一页 |
| 操作符 | 开头 | 查询目标 |