返回顶部
首页 > 资讯 > 数据库 >PostgreSQL的数据类型转换规则是什么
  • 417
分享到

PostgreSQL的数据类型转换规则是什么

2024-04-02 19:04:59 417人浏览 泡泡鱼
摘要

本篇内容介绍了“postgresql的数据类型转换规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本篇内容介绍了“postgresql的数据类型转换规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、Value Storage

插入到数据表的值按如下步骤转换为目标列数据类型.
Value Storage Type Conversion
1.检查是否与目标完全匹配
2.如不能完全匹配,则转换表达式为目标类型.如果在pg_cast系统目录中存在两种类型的转换信息,那么这是可以做到的.否则,如果表达式为unknown类型,literal string的内容会反馈给输入转换例程,用于转换为目标类型.
3.检查目标类型是否有sizing转换.sizing cast是从该类型到自身的一种转换.如在pg_cast找到相应的cast,在存储到目标列前在该表达式上应用该转换.实现函数通常需要一个额外类为integer的参数,用于接收目标列的atttypmod属性值(该值通常用于表示长度),同时需要第3个类型为boolean的参数用于确定cast是显式还是隐式转换.转换函数有责任执行所有与长度相关的语义如大小检查或截断.

下面是一些例子:
character 字符类型转换

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

‘abc’和’def’这两者类型被视为unknown,转换为text类型执行连接操作,||操作的结果为text,该结果转换为bpchar(blank-padded char,character的内部名称)用以匹配目标列类型.

查看pg_cast系统目录

testdb=# select oid,typname from pg_type where typname in ('text','bpchar','char');
 oid  | typname 
------+---------
   18 | char
   25 | text
 1042 | bpchar
(3 rows)
testdb=# select * from pg_cast where castsource=25;
  oid  | castsource | casttarget | castfunc | castcontext | castmethod 
-------+------------+------------+----------+-------------+------------
 11381 |         25 |       2205 |     1079 | i           | f
 11397 |         25 |       1042 |        0 | i           | b
 11398 |         25 |       1043 |        0 | i           | b
 11409 |         25 |         18 |      944 | a           | f
 11412 |         25 |         19 |      407 | i           | f
 11466 |         25 |        142 |     2896 | e           | f
(6 rows)

转换函数

testdb=# select oid,proname,prorettype,proargtypes,prosrc from pg_proc where oid in (0,407,944,1079,2896);
 oid  | proname  | prorettype | proargtypes |    prosrc     
------+----------+------------+-------------+---------------
  407 | name     |         19 | 25          | text_name
  944 | char     |         18 | 25          | text_char
 1079 | reGClass |       2205 | 25          | text_regclass
 2896 | xml      |        142 | 25          | texttoxml
(4 rows)

UNioN(INTERSECT/EXCEPT)必须匹配可能的不太相同的类型以成形成一个单独的结果集.该解析算法分别应用于union查询的每一个输出列.CASE, ARRAY, VALUES, GREATEST 和 LEAST使用相同的算法匹配表达式并选择结果数据类型.
Type Resolution for UNION, CASE, and Related Constructs
1.如果所有输入是同一种类型,而且不是unknown,则解析为该类型
2.如果所有输入为同一个domain类型,则后续步骤的处理的时候把类型视为domain的基类型
3.如果所有输入类型为unknown,则解析为text(字符串的首选类型).否则,unknown类型的输入接下来会被忽略
4.如果非unknown类型不是同一个类型,则失败
5.选择第一个非unknown类型的首选类型
6.否则,选择允许所有优先非unknown输入可被隐私转换的最后一个非unknown输入类型
7.转换所有输入为选择的类型,如存在不能转换的类型,则失败

下面是一些例子:
Simple Union

testdb=# SELECT 1.2 AS "numeric" UNION SELECT 1;
 numeric 
---------
       1
     1.2
(2 rows)

1.2明确为numeric类型,integer 1可隐式转换为numeric,因此使用numeric类型

Transposed Union

testdb=# SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL);
 real 
------
    1
  2.2
(2 rows)

实数不能隐式转换为整数,但整数可隐式转换为real,因此1会被转换为real,union结果类型为real.

Nested Union

testdb=# SELECT NULL UNION SELECT NULL UNION SELECT 1;
psql: ERROR:  UNION types text and integer cannot be matched
LINE 1: SELECT NULL UNION SELECT NULL UNION SELECT 1;

PG会把多个Unions视为成对的操作,该SQL可被视为”(SELECT NULL UNION SELECT NULL) UNION SELECT 1”.按照上面的规则,内部union会解析为text类型,外部union的输入为text和integer类型,导致上述错误.

“PostgreSQL的数据类型转换规则是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL的数据类型转换规则是什么

本文链接: https://lsjlt.com/news/63899.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PostgreSQL的数据类型转换规则是什么
    本篇内容介绍了“PostgreSQL的数据类型转换规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • PostgreSQL的数据类型转换规则有哪些
    这篇文章主要介绍“PostgreSQL的数据类型转换规则有哪些”,在日常操作中,相信很多人在PostgreSQL的数据类型转换规则有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • java强制类型转换规则是什么
    在Java中,强制类型转换是将一个数据类型转换为另一个数据类型的过程。强制类型转换规则如下:1. 只能在继承关系存在的类之间进行类型...
    99+
    2023-09-27
    java
  • C语言中不同类型的数据转换规则是什么
    本篇内容介绍了“C语言中不同类型的数据转换规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!不同类型数据间的混合运算与类型转换1.自动...
    99+
    2023-06-20
  • Oracle vs PostgreSQL,研发注意事项(9)- PostgreSQL数据类型转换规则#1
    PostgreSQL与Oracl...
    99+
    2024-04-02
  • Tengine转换模型的规则是什么
    Tengine转换模型的规则如下:1. 模型格式:Tengine支持转换Caffe、ONNX、TensorFlow等常见的深度学习模...
    99+
    2023-09-21
    Tengine
  • C++ 函数参数类型的转换规则
    c++++ 函数参数类型转换规则包括: 无符号类型转换为有符号类型、精度低的类型转换为精度高的类型、浮点类型之间的转换、兼容的指针类型之间转换。实战案例:可以传递无符号整数、精度低的整数...
    99+
    2024-04-13
    c++ 函数参数类型 隐式类型转换 隐式转换
  • JavaScript数据类型及相互间的转换规则
    目录数据类型的分类非标准特殊对象SymbolBigInt 大数类型数据类型检测数据类型间的相互转换规则Number([val])parseInt([val],[radix]) par...
    99+
    2024-04-02
  • c语言数据转换的规则是什么
    C语言中,数据转换的规则如下:1. 自动类型转换:当表达式中的操作数类型不同时,会发生自动类型转换。自动类型转换按照以下规则进行:-...
    99+
    2023-10-10
    c语言
  • C语言中不同类型的数据遵循什么转换规则
    本篇内容主要讲解“C语言中不同类型的数据遵循什么转换规则”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中不同类型的数据遵循什么转换规则”吧!1.自动类型转换在C语言中,自动类型转换遵循以下...
    99+
    2023-06-17
  • Python转换数据类型函数和转换数据类型的作用是什么
    这篇文章给大家分享的是有关Python转换数据类型函数和转换数据类型的作用是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、转换数据类型的作用(必要性)先用一个问题来讲解一下为什么要学习转换数据类型?问题:...
    99+
    2023-06-29
  • 详解C语言中不同类型的数据转换规则
    不同类型数据间的混合运算与类型转换 1.自动类型转换 在C语言中,自动类型转换遵循以下规则: ①若参与运算量的类型不同,则先转换成同一类型,然后进行运算 ②转换按数据长度增加的方...
    99+
    2024-04-02
  • JavaScript隐式类型转换规则详解
    目录前言数学运算符中的类型转换减、乘、除加逻辑语句中的类型转换单个变量使用 == 比较ToPrimitive前言 在 JavaScript 中,在进行运算操作时,如果两边数据不统一,...
    99+
    2023-05-18
    JavaScript 隐式类型转换 JavaScript 类型转换规则
  • c++数据类型转换的方法是什么
    在C++中,数据类型转换有以下几种方法:1. 隐式转换:在某些情况下,C++会自动执行数据类型的隐式转换。例如,将整数赋值给浮点数变...
    99+
    2023-09-16
    c++
  • 深入探讨PHP中的类型转换规则
    在PHP编程中,类型转换是一项非常重要的操作,它涉及到不同数据类型在不同情况下的转换和处理。本文将深入探讨PHP中的类型转换规则,并通过具体的代码示例来说明不同情况下的转换情况。 首先...
    99+
    2024-03-08
    php类型转换
  • JSON.stringify的特性和转换规则是什么
    JSON.stringify() 是一个内置函数,用于将 JavaScript 对象转换为 JSON 字符串。它的特性和转换规则如下...
    99+
    2024-03-06
    JSON
  • php数据类型的永久转换函数是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在PHP中,实现数据类型转换的函数有多种:intval()、floatval()、boolval()、strval()、settype()。但intval()、floa...
    99+
    2015-03-31
    php 数据类型 settype()
  • PostgreSQL中的bool类型转换为smallint的方法是什么
    这篇文章主要介绍“PostgreSQL中的bool类型转换为smallint的方法是什么”,在日常操作中,相信很多人在PostgreSQL中的bool类型转换为smallint的方法是什么问题上存在疑惑,小...
    99+
    2024-04-02
  • JavaScript运算符规则与隐式类型的转换
    本篇内容介绍了“JavaScript运算符规则与隐式类型的转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • Python转换数据类型函数和转换数据类型的作用
    目录一、转换数据类型的作用(必要性)二、转换数据类型的函数三、快速体验数据类型转换前言: 学习Python的转换数据类型前期主要学习目标有两个,一是数据类型转换的必要性,二是数据类型...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作