程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2數值函數簡介及使用

DB2數值函數簡介及使用

編輯:DB2教程

DB2數值函數簡介及使用   學習一種數據庫,最開始我們都是從其內部函數開始學習的,這些內部函
數對於我們編寫SQL有很大的幫助; 本文雖然介紹的不全,但能夠起到一個引導作用,具體信息以官網為准。 1、取絕對值的函數:abs、absval 參數個數:1 參數類型:smallint,integer,bigint數據類型;也可以為null,此時返回值也為null。 db2 => select abs(-123),abs(null),abs('-100') from sysibm.sysdummy1 1           2                                          3 ----------- ------------------------------------------ ------------------------------------------         123                                          -                                        100   1 條記錄已選擇。     db2 => select abs(NaN)||' '||abs(sNaN)||' '||abs(Infinity) from sysibm.sysdummy1 1 ---------------------- NAN SNAN INFINITY   1 條記錄已選擇。   2、向上取整:ceil、ceiling db2 => select ceil(123.89),ceiling(123.49) from sysibm.sysdummy1 1       2 ------- -------    124.    124.   1 條記錄已選擇。   如果ceil函數的參數為一個數值組成的字符串,如'123.45', 此函數能夠將其轉換為一個浮點數,在進行取整操作。 db2 => select ceil(123.45),ceil('123.45') from sysibm.sysdummy1 1       2 ------- ------------------------------------------    124.                                        124   1 條記錄已選擇。   3、向下取整數:floor 參數個數:1 參數類型:整數和浮點數,也可以是null,此時返回值為null。 db2 => select floor(123.56),floor(100),floor(-123.99) from sysibm.sysdummy1 1       2           3 ------- ----------- -------    123.         100   -124.   1 條記錄已選擇。   db2 => select floor(null) from sysibm.sysdummy1 1 ------------------------------------------                                          -   1 條記錄已選擇。   4、求M的n次冪:power(M,n) 返回值: integer:若兩個參數都為integer或者smallint bigint:若一個為bigint類型,另一個為bigint、integer或者smallint。 double:若兩個參數都為浮點數的話。   db2 => select power(3.2,2.1),power(3,2),power(3,0) from sysibm.sysdummy1 1                        2           3 ------------------------ ----------- -----------   +1.15031015682351E+001           9           1   1 條記錄已選擇。     5、隨機數:rand(m)函數 返回值:返回一個0和1之間的浮點數;若參數為null,結果也為null。 參數:類型為smallint或integer的數,范圍在0-2147483647之間的數,稱為種子。   db2 => select rand(),rand(500),rand(null) from sysibm.sysdummy1 1                        2                        3 ------------------------ ------------------------ ------------------------   +2.43232520523698E-001   +5.09964293343913E-002                        -   1 條記錄已選擇。   生成0-1的隨機數: select rand() from sysibm.sysdummy1   生成0-n的隨機整數: select cast(rand()*n as int) from sysibm.sysdummy1 db2 => values (cast(rand()*10 as int)) 1 -----------           5   1 條記錄已選擇。   db2 => values (cast(rand()*10 as int)) 1 -----------           1   1 條記錄已選擇。   生成n-m的隨機整數(m>n): select n+cast(rand()*(m-n) as int) from sysibm.sysdummy1 db2 => select 5+cast(rand()*(10-5) as int) from sysibm.sysdummy1 1 -----------           9   1 條記錄已選擇。   db2 => select 5+cast(rand()*(10-5) as int) from sysibm.sysdummy1 1 -----------           7   1 條記錄已選擇。   通過rand() 函數和fetch frist 能隨機取表中的行,從表中隨機取n行數據 (在fetch first中n必須為大於等於1的整數,否則報錯): select * from tb order by rand()  fetch first n rows only db2 => select b.* from (select row_number() over () ,a.empno,
a.salary from employee a) b order by rand() fetch first 5 rows only 1                    EMPNO  SALARY -------------------- ------ -----------                   19 000210    68270.00                   20 000220    49840.00                   11 000130    73800.00                   30 000320    39950.00                   12 000140    68420.00   5 條記錄已選擇。   db2 => select b.* from (select row_number() over () ,a.empno,
a.salary from employee a) b order by rand() fetch first 5 rows only 1                    EMPNO  SALARY -------------------- ------ -----------                   18 000200    57740.00                   13 000150    55280.00                   17 000190    50450.00                   15 000170    44680.00                   33 200010    46500.00   5 條記錄已選擇。   6、四捨五入:round (m,n) 參數:m表示一個數值數據,整數或者浮點數,正負數都可以,正負數進位都向其ceil()方向。      n表示進位的數目,整數表示處理小數點後面的數,負數表示處理整數部分的數,integer類型。 實例:   db2 => values (round(873.726,2),round(873.726,1),        round(873.726,0),round(873.726,-1),round(873.726,-2),round(873.726,-3)) 1         2         3         4         5         6 --------- --------- --------- --------- --------- ---------   873.730   873.700   874.000   870.000   900.000  1000.000   1 條記錄已選擇。     db2 => values (round(-745.5,-2),round(-745.5,-1)) 1       2 ------- -------  -700.0  -750.0   1 條記錄已選擇。   7、將數值轉換為字符串形式:digits()函數 參數:smallint,integer,bigint,decimal;       char或者varchar類型的數值字符串,在進行此函數操作之前,
字符串的值隱式轉換為decimal(31,6)。       參數可以為null,此時返回值為null。 返回值:返回數值的字符串形式,不足長度的自動在字符前補齊0。         返回固定長度的字符串,若參數為浮點數,小數點後面的也計算在內;         對於不足長度的,在整數的最前端補0,下面是實例。 employee表的結構如下,最後三個字段的長度為9,小數點位數為2: db2 => describe table employee                                 數據類型                      列 列名                             模式       數據類型名稱      長     小數位      NULL ------------------------------- --------- ------------------- ---------- ----- ------ EMPNO                           SYSIBM    CHARACTER                    6     0 否 FIRSTNME                        SYSIBM    VARCHAR                     12     0 否 MIDINIT                         SYSIBM    CHARACTER                    1     0 是 LASTNAME                        SYSIBM    VARCHAR                     15     0 否 WORKDEPT                        SYSIBM    CHARACTER                    3     0 是 PHONENO                         SYSIBM    CHARACTER                    4     0 是 HIREDATE                        SYSIBM    DATE                         4     0 是 JOB                             SYSIBM    CHARACTER                    8     0 是 EDLEVEL                         SYSIBM    SMALLINT                     2     0 否 SEX                             SYSIBM    CHARACTER                    1     0 是 BIRTHDATE                       SYSIBM    DATE                         4     0 是 SALARY                          SYSIBM    DECIMAL                      9     2 是 BONUS                           SYSIBM    DECIMAL                      9     2 是 COMM                            SYSIBM    DECIMAL                      9     2 是   14 條記錄已選擇。   下面是digits函數的轉換情況: select salary,digits(salary),bonus,digits(bonus),comm,digits(comm)  from employee fetch first 5 rows only   SALARY      2         BONUS       4         COMM        6 ----------- --------- ----------- --------- ----------- ---------   152750.00 015275000     1000.00 000100000     4220.00 000422000    94250.00 009425000      800.00 000080000     3300.00 000330000    98250.00 009825000      800.00 000080000     3060.00 000306000    80175.00 008017500      800.00 000080000     3214.00 000321400    72250.00 007225000      500.00 000050000     2580.00 000258000   5 條記錄已選擇。     8、轉換為數值:to_number(string,format) 此函數為decfloat_format的別名。 參數:string為數值型的字符串,如:'-100.1','01234'等。 format為轉換後的數值型的呈現格式,有如下形式: 0 or 9:每一個數字代表一個字符。 MI:對於負數,將尾部的負數符號(-)移動到最前頭;     對於正數,將在其前面添加一個符號(+)或者空格。 S:如格式MI PR:將一對尖括號(<>)包含起來的數視為負數,轉換後在其前面添加一個負數符號(-)。 $:必須是轉換字符串前面包括$符號。 ,:逗號,數值分隔符 . :點號,小數點標志。     db2 => values to_number('123.001') + 0.01 1 ------------------------------------------                                    123.011   db2 => values to_number('123.456','000.000') 1 ------------------------------------------                                    123.456   db2 => values to_number('123.456','000.000') 1 ------------------------------------------                                    123.456 db2 => values to_number('987.123','999.999MI')     1 ------------------------------------------                                    987.123   db2 => values to_number('<123.456>','000.000PR') 1 ------------------------------------------                                   -123.456   db2 => values to_number('$123,456.78','$000,000.00') 1 ------------------------------------------                                  123456.78     9、數值截取函數:trunc(m,n)或者truncate(m,n) 參數:m為數值型,整數或者浮點數;      n為截取長度,當n大於0,則截取小數部分,當小於0,則截取整數部分 返回值:對於指定數值m,截取n個長度的值。 db2 => values (trunc(873.726,2),trunc(873.726,1),trunc(873.726,0)) 您想執行以上命令嗎?(y/n) y 1        2        3 -------- -------- --------  873.720  873.700  873.000   1 條記錄已選擇。   db2 => values (trunc(873.726,-1),trunc(873.726,-2),trunc(873.726,2),trunc(873.726,-3)) 您想執行以上命令嗎?(y/n) y 1        2        3        4 -------- -------- -------- --------  870.000  800.000  873.720    0.000   1 條記錄已選擇。     10、轉換為浮點數:decfloat(m,16|34) 參數:m可以是數值型,也可以是字符串(有數值組成的字符串,如'123.98') 返回值:將m轉換為長度為16或者34的浮點數,默認為34.     db2 => values (decfloat(123.45),decfloat('-123.45',16)+10) 1                                          2 ------------------------------------------ ------------------------                                     123.45                  -113.45   1 條記錄已選擇。   11、數值比較函數:compare_defloat(a,b) 參數:兩個參數都是decfloat(34)類型的浮點數,否則將會被自動轉換為decfloat(34)。 返回值: 0: a=b 1: a 2: a>b 3: a和b沒有直接順序關系     db2 => values (compare_decfloat(decfloat(1.5),decfloat(1.5)),
compare_decfloat(decfloat(1.5),decfloat(1.50)))   1      2 ------ ------      0      2   1 條記錄已選擇。   db2 => values (compare_decfloat(decfloat(1.770),decfloat(1.77)),compare_
decfloat(decfloat(NaN),decfloat(1.2)))   1      2 ------ ------      1      3   1 條記錄已選擇。   官網上有下面這個實例: COMPARE_DECFLOAT(DECFLOAT(2.17), DECFLOAT(2.17)) = 0  COMPARE_DECFLOAT(DECFLOAT(2.17), DECFLOAT(2.170)) = 2  COMPARE_DECFLOAT(DECFLOAT(2.170), DECFLOAT(2.17)) = 1  COMPARE_DECFLOAT(DECFLOAT(2.17), DECFLOAT(0.0)) = 2  COMPARE_DECFLOAT(INFINITY,INFINITY) = 0  COMPARE_DECFLOAT(INFINITY,-INFINITY) = 2  COMPARE_DECFLOAT(DECFLOAT(-2),INFINITY) = 1  COMPARE_DECFLOAT(NAN,NAN) = 3  COMPARE_DECFLOAT(DECFLOAT(-0.1),SNAN) = 3     12、normalize_decfloat(decfloat_number) 參數:能夠轉換為decfloat(16)的smallint,integer,real,double,
或者decimal(p,s)(p<=16)類型;       bigint或者decimal(p,s)(p>16)的將會被轉換為decfloat(34)。 返回值:將一個數值轉換為一個小數乘以10的n次冪的形式,
如1200轉換為1.2E3。 db2 => values (normalize_decfloat(decfloat(-1200)),normalize_
decfloat(decfloat(1.2000)))   1                                          2 ------------------------------------------ ------------------------------------------                                    -1.2E+3                                        1.2   1 條記錄已選擇。   官網上有下面實例: NORMALIZE_DECFLOAT(DECFLOAT(2.1)) = 2.1 NORMALIZE_DECFLOAT(DECFLOAT(-2.0)) = -2 NORMALIZE_DECFLOAT(DECFLOAT(1.200)) = 1.2 NORMALIZE_DECFLOAT(DECFLOAT(-120)) = -1.2E+2 NORMALIZE_DECFLOAT(DECFLOAT(120.00)) = 1.2E+2 NORMALIZE_DECFLOAT(DECFLOAT(0.00)) = 0 NORMALIZE_DECFLOAT(-NAN) = -NaN  NORMALIZE_DECFLOAT(-INFINITY) = -Infinity   還有很多系統函數,如數學函數,sin,cos,tan,exp等, 詳細信息參照官網:http://pic.dhe.ibm.com/infocenter/
db2luw/v9r7/index.jsp 位置:數據庫基礎 -> SQL -> Functions

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved