真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PostgreSQL的數(shù)據(jù)類型轉(zhuǎn)換規(guī)則是什么

本篇內(nèi)容介紹了“PostgreSQL的數(shù)據(jù)類型轉(zhuǎn)換規(guī)則是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的杭錦后網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一、Value Storage

插入到數(shù)據(jù)表的值按如下步驟轉(zhuǎn)換為目標列數(shù)據(jù)類型.
Value Storage Type Conversion
1.檢查是否與目標完全匹配
2.如不能完全匹配,則轉(zhuǎn)換表達式為目標類型.如果在pg_cast系統(tǒng)目錄中存在兩種類型的轉(zhuǎn)換信息,那么這是可以做到的.否則,如果表達式為unknown類型,literal string的內(nèi)容會反饋給輸入轉(zhuǎn)換例程,用于轉(zhuǎn)換為目標類型.
3.檢查目標類型是否有sizing轉(zhuǎn)換.sizing cast是從該類型到自身的一種轉(zhuǎn)換.如在pg_cast找到相應(yīng)的cast,在存儲到目標列前在該表達式上應(yīng)用該轉(zhuǎn)換.實現(xiàn)函數(shù)通常需要一個額外類為integer的參數(shù),用于接收目標列的atttypmod屬性值(該值通常用于表示長度),同時需要第3個類型為boolean的參數(shù)用于確定cast是顯式還是隱式轉(zhuǎn)換.轉(zhuǎn)換函數(shù)有責(zé)任執(zhí)行所有與長度相關(guān)的語義如大小檢查或截斷.

下面是一些例子:
character 字符類型轉(zhuǎn)換

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)

‘a(chǎn)bc’和’def’這兩者類型被視為unknown,轉(zhuǎn)換為text類型執(zhí)行連接操作,||操作的結(jié)果為text,該結(jié)果轉(zhuǎn)換為bpchar(blank-padded char,character的內(nèi)部名稱)用以匹配目標列類型.

查看pg_cast系統(tǒng)目錄

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)

轉(zhuǎn)換函數(shù)

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, CASE, and related constructs

UNION(INTERSECT/EXCEPT)必須匹配可能的不太相同的類型以成形成一個單獨的結(jié)果集.該解析算法分別應(yīng)用于union查詢的每一個輸出列.CASE, ARRAY, VALUES, GREATEST 和 LEAST使用相同的算法匹配表達式并選擇結(jié)果數(shù)據(jù)類型.
Type Resolution for UNION, CASE, and Related Constructs
1.如果所有輸入是同一種類型,而且不是unknown,則解析為該類型
2.如果所有輸入為同一個domain類型,則后續(xù)步驟的處理的時候把類型視為domain的基類型
3.如果所有輸入類型為unknown,則解析為text(字符串的首選類型).否則,unknown類型的輸入接下來會被忽略
4.如果非unknown類型不是同一個類型,則失敗
5.選擇第一個非unknown類型的首選類型
6.否則,選擇允許所有優(yōu)先非unknown輸入可被隱私轉(zhuǎn)換的最后一個非unknown輸入類型
7.轉(zhuǎn)換所有輸入為選擇的類型,如存在不能轉(zhuǎn)換的類型,則失敗

下面是一些例子:
Simple Union

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

1.2明確為numeric類型,integer 1可隱式轉(zhuǎn)換為numeric,因此使用numeric類型

Transposed Union

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

實數(shù)不能隱式轉(zhuǎn)換為整數(shù),但整數(shù)可隱式轉(zhuǎn)換為real,因此1會被轉(zhuǎn)換為real,union結(jié)果類型為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”.按照上面的規(guī)則,內(nèi)部union會解析為text類型,外部union的輸入為text和integer類型,導(dǎo)致上述錯誤.

“PostgreSQL的數(shù)據(jù)類型轉(zhuǎn)換規(guī)則是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


標題名稱:PostgreSQL的數(shù)據(jù)類型轉(zhuǎn)換規(guī)則是什么
標題URL:http://weahome.cn/article/jeddic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部