91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle vs PostgreSQL,研發注意事項(7)- 類型轉換

發布時間:2020-08-07 15:36:02 來源:ITPUB博客 閱讀:191 作者:husthxd 欄目:關系型數據庫

本節以數值型相互轉換以及數值型和字符型的轉換為例大體介紹了Oracle和PostgreSQL類型轉換上的部分異同,可據此思路推廣到其他類型。

一、數值類型轉換

下面以數值類型為例子說明,包括運算結果的轉換和強制類型轉換.
運算結果
以除運算為例說明.
PostgreSQL的除運算

testdb=# select 1/4;
 ?column? 
----------
        0
(1 row)

Oracle的除運算

TEST-orcl@server4>select 1/4 from dual;

       1/4
----------
       .25

兩個整型值1和4參與除法運算,結果PostgreSQL為整型的0,Oracle為浮點型的0.25,兩者的行為不一致.
為何PostgreSQL執行整型運算返回的結果是整型?當然,這是PG的機制(整型/整型=整型)使然,在PG中,運算的結果類型可查詢pg_operator獲得:

testdb=# \x
Expanded display is on.
testdb=# select * from pg_operator where oprname = '/' and oprleft=21 and oprright = 21;
-[ RECORD 1 ]+--------
oprname      | / -->運算符
oprnamespace | 11
oprowner     | 10
oprkind      | b
oprcanmerge  | f
oprcanhash   | f
oprleft      | 21 -->int2(占用2個字節的整型,通過select * from pg_type where oid=21查詢可得)
oprright     | 21 -->同上
oprresult    | 21 -->整型/整型,結果也是整型
oprcom       | 0
oprnegate    | 0
oprcode      | int2div
oprrest      | -
oprjoin      | -

在PostgreSQL中,要想獲得0.25的結果,需要進行轉換:

testdb=# select 1/4::float;
 ?column? 
----------
     0.25
(1 row)

二、強制類型轉換

以字符型->整型為例說明.
PostgreSQL

testdb=# drop table if exists t_cast ;
DROP TABLE
testdb=# create table t_cast (c_int int,c_s varchar(20));
CREATE TABLE
testdb=# insert into t_cast values(1,'1');
INSERT 0 1
testdb=# insert into t_cast values(2,'2');
INSERT 0 1
testdb=# select * from t_cast where c_int = 1;
 c_int | c_s 
-------+-----
     1 | 1
(1 row)

testdb=# select * from t_cast where c_s = 1;
ERROR:  operator does not exist: character varying = integer -->可變長字符型轉換為整型
LINE 1: select * from t_cast where c_s = 1;
                                       ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

Oracle

TEST-orcl@server4>drop table t_cast;

Table dropped.

TEST-orcl@server4>create table t_cast (c_int int,c_s varchar2(20)) tablespace users;

Table created.

TEST-orcl@server4>insert into t_cast values(1,'1');

1 row created.

TEST-orcl@server4>insert into t_cast values(2,'2');

1 row created.

TEST-orcl@server4>select * from t_cast where c_int = 1;

     C_INT C_S
---------- --------------------
         1 1

TEST-orcl@server4>select * from t_cast where c_s = 1;

     C_INT C_S
---------- --------------------
         1 1

PG,整型不能轉換為字符型,而Oracle可以.
PG可以通過顯式類型轉換或者自定義類型轉換的機制實現字符型->整型的轉換:

-- 顯式轉換
testdb=# select * from t_cast where c_s = 1::varchar;
 c_int | c_s 
-------+-----
     1 | 1
(1 row)
-- 自定義類型轉換
testdb=# create cast(varchar as integer) with inout as implicit;
CREATE CAST
testdb=# select * from t_cast where c_s = 1;
 c_int | c_s 
-------+-----
     1 | 1
(1 row)

通過數據字典表pg_cast可查詢PG支持的類型轉換.

testdb=# select oid,a.* from pg_cast a where castsource=1043 and casttarget = 23;
  oid  | castsource | casttarget | castfunc | castcontext | castmethod 
-------+------------+------------+----------+-------------+------------
 16774 |       1043 |         23 |        0 | i           | i --> 這是新加的記錄

三、參考資料

CREATE CAST
PostgreSQL 自定義自動類型轉換(CAST)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东辽县| 北票市| 普陀区| 崇阳县| 通化市| 伊金霍洛旗| 菏泽市| 保德县| 巴中市| 公主岭市| 开远市| 讷河市| 昭平县| 沙湾县| 余姚市| 宜都市| 云浮市| 大英县| 贞丰县| 福贡县| 大同县| 阿图什市| 明水县| 马公市| 大荔县| 中卫市| 华阴市| 凤庆县| 上栗县| 穆棱市| 奎屯市| 瓮安县| 建昌县| 玉树县| 慈溪市| 麻阳| 曲阜市| 黔江区| 巨野县| 咸丰县| 休宁县|