新聞中心
通常,表達式不能包含不同數(shù)據(jù)類型的值。但是為了使表達式能夠進行計算,OceanBase 支持從一個數(shù)據(jù)類型到另一個數(shù)據(jù)類型的值的隱式轉(zhuǎn)換和顯式轉(zhuǎn)換。

隱式數(shù)據(jù)類型轉(zhuǎn)換
當(dāng)轉(zhuǎn)換有意義時,OceanBase 數(shù)據(jù)庫會自動將一個值從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。隱式數(shù)據(jù)類型的轉(zhuǎn)換規(guī)則:
INSERT和UPDATE操作時,OceanBase 把變量值轉(zhuǎn)換成列類型。SELECT FROM操作時,OceanBase 把列數(shù)據(jù)類型轉(zhuǎn)換成目標(biāo)變量類型。字符值和數(shù)字值比較時,OceanBase 把字符值轉(zhuǎn)換成數(shù)字值。
在處理數(shù)值時,OceanBase 會調(diào)整精度和小數(shù)位數(shù)。由此產(chǎn)生的數(shù)字?jǐn)?shù)據(jù)類型與基礎(chǔ)表中找到的數(shù)字?jǐn)?shù)據(jù)類型不同。
字符值或數(shù)值和浮點數(shù)值之間的轉(zhuǎn)換可以是不精確的,因為字符類型和數(shù)量使用十進制精度來表示數(shù)值,浮點數(shù)使用二進制精度。
當(dāng)一個
CLOB值轉(zhuǎn)換為一個字符類型如VARCHAR2,或BLOB轉(zhuǎn)換為RAW時。如果要轉(zhuǎn)換的數(shù)據(jù)大于目標(biāo)數(shù)據(jù)類型,那么數(shù)據(jù)庫會返回一個錯誤。在從時間戳值轉(zhuǎn)換為
DATE值的過程中,時間戳值的小數(shù)秒部分被截斷,且時間戳值的小數(shù)秒部分進行四舍五入。從
BINARY_FLOAT轉(zhuǎn)換為BINARY_DOUBLE是準(zhǔn)確的。如果
BINARY_DOUBLE的精度位數(shù)超出了BINARY_FLOAT支持的位數(shù),BINARY_DOUBLE轉(zhuǎn)換為BINARY_FLOAT是不精確的。當(dāng)將字符值與
DATE值進行比較時,OceanBase 將字符數(shù)據(jù)轉(zhuǎn)換為DATE。賦值操作時,OceanBase 把等號右邊的值轉(zhuǎn)換成左邊賦值目標(biāo)數(shù)據(jù)類型。
連接操作時,OceanBase 把非字符類型轉(zhuǎn)換成字符類型或國家字符類型。
隱式數(shù)據(jù)類型轉(zhuǎn)換矩陣
下表顯示了所有的隱式數(shù)據(jù)類型轉(zhuǎn)換,您不需要考慮轉(zhuǎn)換的方向或轉(zhuǎn)換的上下文?!?”表示不支持轉(zhuǎn)換。
| 數(shù)據(jù)類型 | CHAR | VARCHAR2 | NCHAR | NVARCHAR2 | DATE | DATETIME / INTERVAL | NUMBER | BINARY_FLOAT | BINARY_DOUBLE | RAW | CLOB | BLOB |
1 您不能直接將 RAW 轉(zhuǎn)換為 INTERVAL,但是可以使用 UTL_RAW.CAST_TO_VARCHAR2([RAW]) 將RAW 轉(zhuǎn)換為 VARCHAR2,然后將所得的 VARCHAR2 值轉(zhuǎn)換為 INTERVAL。
不同字符類型之間隱式轉(zhuǎn)換的方向
| 數(shù)據(jù)類型 | TO_CHAR | TO_VARCHAR2 | TO_NCHAR | TO_NVARCHAR2 |
隱式數(shù)據(jù)類型轉(zhuǎn)換示例
執(zhí)行以下語句:
SELECT 5 * 10 + 'james' FROM DUAL;語句執(zhí)行失敗,且您收到以下報錯:
invalid number這是由于 OceanBase 使用了隱式數(shù)據(jù)類型轉(zhuǎn)換,將 'james' 轉(zhuǎn)換為數(shù)字類型,但是轉(zhuǎn)換失敗。
本示例將字符串 '2' 從 CHAR 數(shù)據(jù)類型隱式轉(zhuǎn)換為了數(shù)字?jǐn)?shù)據(jù)類型 2,計算結(jié)果為 52。
執(zhí)行以下語句:
SELECT 5 * 10 + '2' FROM DUAL;查詢結(jié)果如下:
+---------------------+
| 5 * 10 + '2' |
+---------------------+
| 52 |
+---------------------+顯式數(shù)據(jù)類型轉(zhuǎn)換
您可以使用 SQL 轉(zhuǎn)換函數(shù)轉(zhuǎn)換數(shù)據(jù)類型,SQL 函數(shù)顯式轉(zhuǎn)換一個數(shù)據(jù)類型為另一個數(shù)據(jù)類型。
顯示類型轉(zhuǎn)換矩陣
| 數(shù)據(jù)類型 | To CHAR、VARCHAR2、NCHAR、NVARCHAR2 | To NUMBER | To Datetime/ Interval | To RAW | To CLOB、BLOB | To_BINARY_FLOAT | To_BINARY_DOUBLE |
| From CHAR、VARCHAR2、NCHAR、NVARCHAR2 | |||||||
| From NUMBER | |||||||
| From Datetime/Interval | |||||||
| From RAW | |||||||
| From CLOB、BLOB | |||||||
| From BINARY_FLOAT | |||||||
| From BINARY_DOUBLE | |||||||
顯式數(shù)據(jù)類型轉(zhuǎn)換示例
當(dāng)前的時間通過 TO_CHAR 函數(shù)顯式轉(zhuǎn)換為想要的格式輸出。
執(zhí)行以下語句:
SELECT TO_CHAR(SYSDATE, 'YYYY_MM_DD') FROM DUAL;查詢結(jié)果如下:
+-------------------------------+
| TO_CHAR(SYSDATE,'YYYY_MM_DD') |
+-------------------------------+
| 2020_02_27 |
+-------------------------------+ 網(wǎng)頁題目:創(chuàng)新互聯(lián)OceanBase教程:OceanBase 數(shù)據(jù)類型轉(zhuǎn)換
鏈接地址:http://www.5511xx.com/article/ccieddd.html


咨詢
建站咨詢
