打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OushuDB 用户指南之类型转换值存储

要插入表中的数值也根据下面的步骤转换成目标列的数据类型。

值存储数据类型解析

1. 查找与目标准确的匹配。

2. 否则,试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已注册的转换函数, 那么直接调用该转换函数即可。如果表达式是一个未知类型文本, 该文本字符串的内容将交给目标类型的输入转换过程。

  1. 检查一下看看目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在pg_cast表里面找到一个,那么在存储到目标列之前先在表达式上应用。 这样的转换函数总是接受一个额外的类型为integer的参数, 它接收目标字段的atttypmod值(实际上是其声明长度,atttypmod 的解释随不同的数据类型而不同),并且它可能接受一个boolean类型的第三个参数, 表示转换是显式的还是隐式的。转换函数负责施加那些长度相关的语义,比如长度检查或者截断。

例.character存储类型转换

对一个目标列定义为character(20)的语句,下面的语句显示存储值的长度正确:

CREATE TABLE vv (v character(20));INSERT INTO vv SELECT 'abc' || 'def';SELECT v, octet_length(v) FROM vv;v | octet_length----------------------+--------------abcdef | 20(1 row)

这里真正发生的事情是两个 unknown 文本缺省解析成text, 这样就允许||操作符解析成text连接。 然后操作符的text结果转换成bpchar(“空白填充的字符型”, character类型内部名称)以匹配目标列类型。(因为从text 到bpchar的转换是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。)最后,在系统表里找到长度转换函数bpchar(bpchar, integer, boolean) 并且应用于该操作符的结果和存储的字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言入门教程(一)程序中的一些定义
数据管理发展的三个阶段
超全的数据库建表/SQL/索引规范,建议贴在工位上!
优先度
C语言隐式类型转换规则
c++中的关键字const_cast,dynamic_cast,reinterpret_cast,static_cast 强制类型转换运算符
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服