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
1. 124.
1 条记录已选择。
decimal是整数数据类型如果ceil函数的参数为⼀个数值组成的字符串,如’123.45’,
此函数能够将其转换为⼀个浮点数,在进⾏取整操作。
db2 => select ceil(123.45),ceil(‘123.45’) from sysibm.sysdummy1
1 2
1. 124
1 条记录已选择。
3、向下取整数:floor
参数个数:1
参数类型:整数和浮点数,也可以是null,此时返回值为null。
db2 => select floor(123.56),floor(100),floor(-123.99) from sysibm.sysdummy1
1 2 3
1. 100 -124.
1 条记录已选择。
db2 => select floor(null) from sysibm.sysdummy1
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
通过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(‘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.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论