CREATE CAST - 定义一个用户定义的转换
SYNOPSIS
CREATE CAST (sourcetype AS targettype)
WITH FUNCTION funcname (argtype)
[ AS ASSIGNMENT | AS IMPLICIT ] CREATE CAST (sourcetype AS targettype)
WITHOUT FUNCTION
[ AS ASSIGNMENT | AS IMPLICIT ]
DESCRIPTION 描述
CREATE CAST 定义一个新的转换。 一个转换说明如何在两个类型之间进行转换。比如:
SELECT CAST(42 AS text);
通过调用前面声明的一个函数,把整数常量 42 转换成类型 text, 在这个例子里是 text(int4)。(如果没有预先定义好合适的转换,那么这个转换失败。)
两种类型可以是二进制兼容的, 意思是它们之间可以"自由转换"而不用调用任何函数。 这就需要那个对应的数值使用同样的内部表现形式。 比如,类型 text 和 varchar 是二进制兼容的。
缺省时,只有在明确要求转换的情况下才调用一个转换, 也就是一个明确的 CAST(x AS typename), x::typename,或者 typename(x) 构造。
如果转换标记为 AS ASSIGNMENT,那么在赋一个数值给目标数据类型的字段的时候, 可以隐含调用它。比如,假设 foo.f1 是一个类型为 text 的字段,那么
INSERT INTO foo (f1) VALUES (42);
如果从类型 integer 到类型 text 的转换标记为 AS ASSIGNMENT, 上面的这句就被允许,否则就不允许。(我们通常用术语赋值转换来描述这种转换。)
如果转换标记为 AS IMPLICIT,那么它就可以在任何环境里调用, 不管是赋值还是在表达式的内部。比如,因为 || 接受 text 操作数,
SELECT 'The time is ' || now();
将只有在类型 timestamp 到 text 的转换标记为 AS IMPLICIT 的时候才允许。否则我们就必须明确书写转换, 比如
SELECT 'The time is ' || CAST(now() AS text);
(我们通常使用术语隐含转换来描述这种类型的转换。)
在标记转换为隐含的这个问题上保守一些是明智的。 过于丰富的隐含转换路径会导致 PostgreSQL 选择让人奇怪的命令的解析, 或者是完全不能解析命令,因为存在多个可能的解析。 一条好的拇指定律是,只有在同一个通用类型表里面的那些可以保留转换信息的类型之间才标记为可隐含调用转换。 比如,从 int2 到 int4 可以合理地标记为隐含转换,但是从 float8 到 int4 可能应该是标记为赋值转换。跨类型表的转换,比如 text 到 int4,最好是只能明确地转换。
要想创建一个转换,你必须拥有源或者目的数据类型。要创建一个二进制兼容的转换, 你必须是超级用户。(做这个限制是因为一种有问题的二进制兼容转换可以很容易摧毁服务器。)
PARAMETERS 参数
- sourcetype
- 转换的源数据类型。
- targettype
- 转换的目标数据类型。
- funcname(argtype)
- 用于执行转换的函数。这个函数名可以是用模式名修饰的。 如果它没有用模式名修饰,那么该函数将从路径中找出来。 参数类型必须和源数据类型相同,结果数据类型必须匹配转换的目标类型。
- WITHOUT FUNCTION
- 表示源数据类型和目标数据类型是二进制兼容的, 所以不需要什么函数来执行转换。
- AS ASSIGNMENT
- 表示转换可以在赋值环境里隐含调用。
- AS IMPLICIT
- 表示这个转换可以在任何环境里隐含调用。
NOTES 注意
用 DROP CAST 删除用户定义的转换。
请注意,如果你想能双向转换类型,那么你需要明确地定义两个方向的转换。
在 PostgreSQL 7.3 之前,如果一个函数的名字和一个数据类型相同, 并且返回该种数据类型,而且还接受另外一种类型的参数自动就是一个转换函数。 这个传统随着模式的引入以及为了能在系统表种表示二进制兼容的转换就被废弃了。 (内置的转换函数仍然遵循这个命名规则,但是它们现在必须在系统表 pg_cast 里显示为转换。)
EXAMPLES 例子
要使用函数 int4(text) 创建一个从类型 text 到类型 int4的转换:
CREATE CAST (text AS int4) WITH FUNCTION int4(text);
(这个转换在系统中已经预先定义了。)
CREATE CAST - 定义一个用户定义的转换的更多相关文章
- DROP CAST - 删除一个用户定义的类型转换
SYNOPSIS DROP CAST (sourcetype AS targettype) [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP CAST 删除一个前面 ...
- CREATE CONVERSION - 定义一个用户定义的码制转换
SYNOPSIS CREATE [DEFAULT] CONVERSION name FOR source_encoding TO dest_encoding FROM funcname DESCRIP ...
- new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
new运算符 - JavaScript | MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operator ...
- DROP CONVERSION - 删除一个用户定义的编码转换
SYNOPSIS DROP CONVERSION name [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP CONVERSION 删除一个以前定义的编码转换. 要 ...
- DROP TYPE - 删除一个用户定义数据类型
SYNOPSIS DROP TYPE name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP TYPE 将从系统表里删除用户定义的类型. 只有类 ...
- DROP DOMAIN - 删除一个用户定义的域
SYNOPSIS DROP DOMAIN name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP DOMAIN 将从系统表中删除一个用户域. 只 ...
- DROP AGGREGATE - 删除一个用户定义的聚集函数
SYNOPSIS DROP AGGREGATE name ( type ) [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP AGGREGATE 将删除一个现存聚集 ...
- CREATE FUNCTION - 定义一个新函数
SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE lang ...
- Sql server 浅谈用户定义表类型
1.1 简介 SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型.您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的 ...
随机推荐
- execute ps1 with pwsh.exe
pwsh -file C:\Users\clu\source\repos\Edenred\LISA_5.0.0.0\LISA.ControlPanel\LISA.ControlPanel\bin\Re ...
- sphinx索引部分源码续——过程:连接到CSphSource对应的sql数据源,通过fetch row取其中一行,然后解析出field,分词,获得wordhit,最后再加入到CSphSource的Hits里
后面就是初始化一些存储结构,其中重点说下缓存出来的几个临时文件分别的作用.结尾时tmp0的存储的是被上锁的Index,有些Index正在被查询使用 故上锁.tmp1,即对应将来生成的spp文件,存储词 ...
- linux环境下oracle静默安装
一.安装环境 1.linux版本:redhat6.3_x86_64 2.oracle版本:Oracle Database 11g Enterprise Edition Release 11.2.0.3 ...
- 五:多线程--NSOperation基本操作
一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. (3)最⼤大并发数的相关⽅方法 - (NSInt ...
- js中的call和apply方法
call方法: 语法:call(thisObj,[arg1,arg2,arg3,...]); 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用 ...
- 关于jenkins的安装及自动部署
1. 安装Jenkins 1.1 准备Linux服务器, 关闭防火墙禁止开机启动 systemctl stop firewalld.service #停止firewall systemctl disa ...
- vue2.0构建单页应用最佳实战
链接: https://www.tuicool.com/articles/me6RJfF
- form表单提交的几种方法
form表单提交的几种方法 <form id="myform" name="myform" method="post" onsubmi ...
- Python圈中的符号计算库-Sympy(转载)
<本文来自公众号“大邓带你玩python”,转载> import math math.sqrt(8) 2.8284271247461903 我们看看Python中结果 math.sqrt( ...
- 关于Http的小常识(转载,仅供参考)
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息.HTTP的头信息包括通用头.请求头.响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成. 通用头标:即可用于请求,也可用 ...