虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > DB2数据库 > DB2数值函数简介及使用

DB2数值函数简介及使用
类别:DB2数据库   作者:码皇   来源:互联网   点击:

DB2数值函数简介及使用学习一种数据库,最开始我们都是从其内部函数开始学习的,这些内部函数对于我们编写SQL有很大的帮助;本文虽然介绍的不全,但能够起到一个引导作用,具体信息以官网为准。1、取绝对值的函数
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

相关热词搜索: 数值 函数 简介