W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
通常,表達(dá)式不能包含不同數(shù)據(jù)類型的值。但是為了使表達(dá)式能夠進(jìn)行計(jì)算,OceanBase 支持從一個(gè)數(shù)據(jù)類型到另一個(gè)數(shù)據(jù)類型的值的隱式轉(zhuǎn)換和顯式轉(zhuǎn)換。
當(dāng)轉(zhuǎn)換有意義時(shí),OceanBase 數(shù)據(jù)庫會自動將一個(gè)值從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。隱式數(shù)據(jù)類型的轉(zhuǎn)換規(guī)則:
INSERT
和 UPDATE
操作時(shí),OceanBase 把變量值轉(zhuǎn)換成列類型。SELECT FROM
操作時(shí),OceanBase 把列數(shù)據(jù)類型轉(zhuǎn)換成目標(biāo)變量類型。字符值和數(shù)字值比較時(shí),OceanBase 把字符值轉(zhuǎn)換成數(shù)字值。
在處理數(shù)值時(shí),OceanBase 會調(diào)整精度和小數(shù)位數(shù)。由此產(chǎn)生的數(shù)字?jǐn)?shù)據(jù)類型與基礎(chǔ)表中找到的數(shù)字?jǐn)?shù)據(jù)類型不同。
字符值或數(shù)值和浮點(diǎn)數(shù)值之間的轉(zhuǎn)換可以是不精確的,因?yàn)樽址愋秃蛿?shù)量使用十進(jìn)制精度來表示數(shù)值,浮點(diǎn)數(shù)使用二進(jìn)制精度。
當(dāng)一個(gè) CLOB
值轉(zhuǎn)換為一個(gè)字符類型如 VARCHAR2
,或 BLOB
轉(zhuǎn)換為 RAW
時(shí)。如果要轉(zhuǎn)換的數(shù)據(jù)大于目標(biāo)數(shù)據(jù)類型,那么數(shù)據(jù)庫會返回一個(gè)錯(cuò)誤。
在從時(shí)間戳值轉(zhuǎn)換為 DATE
值的過程中,時(shí)間戳值的小數(shù)秒部分被截?cái)啵視r(shí)間戳值的小數(shù)秒部分進(jìn)行四舍五入。
從 BINARY_FLOAT
轉(zhuǎn)換為 BINARY_DOUBLE
是準(zhǔn)確的。
如果 BINARY_DOUBLE
的精度位數(shù)超出了 BINARY_FLOAT
支持的位數(shù),BINARY_DOUBLE
轉(zhuǎn)換為 BINARY_FLOAT
是不精確的。
當(dāng)將字符值與 DATE
值進(jìn)行比較時(shí),OceanBase 將字符數(shù)據(jù)轉(zhuǎn)換為 DATE
。
賦值操作時(shí),OceanBase 把等號右邊的值轉(zhuǎn)換成左邊賦值目標(biāo)數(shù)據(jù)類型。
連接操作時(shí),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 |
CHAR |
- |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
VARCHAR2 |
Yes |
- |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
- |
NCHAR |
Yes |
Yes |
- |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
- |
NVARCHAR2 |
Yes |
Yes |
Yes |
- |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
Yes |
- |
DATE |
Yes |
Yes |
Yes |
Yes |
- |
- |
- |
- |
- |
- |
- |
- |
DATETIME / INTERVAL |
Yes |
Yes |
Yes |
Yes |
- |
- |
- |
- |
- |
- |
- |
- |
NUMBER |
Yes |
Yes |
Yes |
Yes |
- |
- |
- |
Yes |
Yes |
- |
- |
- |
BINARY_FLOAT |
Yes |
Yes |
Yes |
Yes |
- |
- |
Yes |
- |
Yes |
- |
- |
- |
BINARY_DOUBLE |
Yes |
Yes |
Yes |
Yes |
- |
- |
Yes |
Yes |
- |
- |
- |
- |
RAW |
Yes |
Yes |
Yes |
Yes |
- |
Yes |
- |
- |
- |
- |
Yes |
- |
CLOB |
Yes |
Yes |
Yes |
Yes |
- |
- |
- |
- |
- |
- |
- |
Yes |
BLOB |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Yes |
- |
- |
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 |
from CHAR |
- |
VARCHAR2 |
NCHAR |
NVARCHAR2 |
from VARCHAR2 |
VARCHAR2 |
- |
NVARCHAR2 |
NVARCHAR2 |
from NCHAR |
NCHAR |
NCHAR |
- |
NCHAR2 |
from NVARCHAR2 |
NVARCHAR2 |
NVARCHAR2 |
NVARCHAR2 |
- |
隱式數(shù)據(jù)類型轉(zhuǎn)換示例
執(zhí)行以下語句:
SELECT 5 * 10 + 'james' FROM DUAL;
語句執(zhí)行失敗,且您收到以下報(bào)錯(cuò):
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,計(jì)算結(jié)果為 52。
執(zhí)行以下語句:
SELECT 5 * 10 + '2' FROM DUAL;
查詢結(jié)果如下:
+---------------------+
| 5 * 10 + '2' |
+---------------------+
| 52 |
+---------------------+
您可以使用 SQL 轉(zhuǎn)換函數(shù)轉(zhuǎn)換數(shù)據(jù)類型,SQL 函數(shù)顯式轉(zhuǎn)換一個(gè)數(shù)據(jù)類型為另一個(gè)數(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 |
TO_CHAR(char . ) 、TO_NCHAR(char . ) |
TO_NUMBER |
TO_DATE、TO_TIMESTAMP、TO_TIMESTAMP_TZ、TO_YMINTERVAL、TO_DSINTERVAL |
HEXTORAW |
TO_CLOB |
TO_BINARY_FLOAT |
TO_BINARY_DOUBLE |
From NUMBER |
TO_CHAR(number) 、TO_NCHAR(number) |
-- |
TO_DATE、NUMTOYM_INTERVAL、NUMTOOLS_INTERVAL |
-- |
-- |
TO_BINARY_FLOAT |
TO_BINARY_DOUBLE |
From Datetime/Interval |
TO_CHAR(date ) 、TO_NCHAR(date) |
-- |
-- |
-- |
-- |
-- |
-- |
From RAW |
RAWTOHEX、RAWTONHEX |
-- |
-- |
-- |
TO_BLOB |
-- |
-- |
From CLOB、BLOB |
TO_CHAR、TO_NCHAR |
-- |
-- |
-- |
TO_CLOB |
-- |
-- |
From BINARY_FLOAT |
TO_CHAR(char . ) 、TO_NCHAR(char . ) |
TO_NUMBER |
-- |
-- |
-- |
TO_BINARY_FLOAT |
TO_BINARY_DOUBLE |
From BINARY_DOUBLE |
TO_CHAR(char . ) 、TO_NCHAR(char . ) |
TO_NUMBER |
-- |
-- |
-- |
TO_BINARY_FLOAT |
TO_BINARY_DOUBLE |
顯式數(shù)據(jù)類型轉(zhuǎn)換示例
當(dāng)前的時(shí)間通過 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 |
+-------------------------------+
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: