今天在db2中查詢數據時出現錯誤:
Overflow occurred during numeric data type conversion:SQLCODE=-413, SQLSTATE=22003, DRIVER=3.53.71
數字數據類型轉換過程中出現溢出
select * from rpbbzd where to_number(BBZD_BEGIN) < 2018012004
and to_number(BBZD_END) >=2018012004
此sql在db210.5中沒有問題,但是在8.2中會爆以上溢出錯誤。
改成:
select * from rpbbzd where cast(BBZD_BEGIN as INT) < 2018012004
and cast(BBZD_END as INT) >=2018012004
仍然會有錯誤,對比了一下數據發現超出int類型的范圍了,改用bigint:
select * from rpbbzd where cast(BBZD_BEGIN as BIGINT) < 2018012004
and cast(BBZD_END as BIGINT) >=2018012004
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DB2的常用數據類型包括以下幾個:
一.數字型的。
1. SMALLINT ---短整型,范圍為-32768~+32767
2. INT/INTEGER ---整型,4個字節,范圍為-2147483648~+2147483647,一遍多用於做自動生成的序列,或者用作表記錄的id使用。
3. BIGINT ----大整型,8個字節,精度為19位,夠大了,一般較少使用。
4. DECIMAL(P,S) ---小數型,其中P為精度,S為小數位數,隱含小數點(小數點不計入位數)。比如M DECIMAL(5,2),那么就是指定M的精度為5位(除小數點外所有數字的位數不能超過5),否則插入時會發生數據位溢出;而小數的位數不能超過2,否則插入時會截斷小數位。
比如:
M: 123.45(成功)
M:12.345(成功,但是截斷為12.34)
M:1234.5(失敗,整數位超標,溢出報錯)
5. REAL ---單精度浮點型,不常用
6. DOUBLE ----雙精度浮點型,不常用
二.字符型
char(n) ----定長字符串,長度范圍1~254,常用
varchar(n) ----變長字符串,長度范圍1~32672,常用
CLOB -----字符大對象字符串,很大,沒用過,要用再研究。
三.時間型
date ----占4個字節 插入格式為 'YYYY-MM-DD'
time ----占3個字節 插入格式為 'HH:MM:SS'
timestamp ----占10個字節 插入格式為 'YYYY-MM-DD HH:MM:SS'
當然,這都是采用內部格式壓縮過的。
四.空值
空值使用NULL表示,NULL可以表示任何數據類型的空值,但是NULL不能參加任何算數運算和邏輯運算,如果勉強運算得到的也是NULL
---------------------
作者:dlodj
來源:CSDN
原文:https://blog.csdn.net/DLODJ/article/details/7033619
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!