对Oracle函数类使用不够熟练,特做总结归纳。
函数 | 含义 | 示例 | 结果 |
---|---|---|---|
ceil(n) | 大于或等于数值n的最小整数(向上取整) | select ceil(10) from dual; select ceil(10.1) from dual; | 10 11 |
floor(n) | 小于等于数值n的最大整数(向下取整) | select floor(10) from dual; select floor(10.1) from dual; | 10 10 |
mod(m,n) | m除以n的余数,若n=0,则返回m | select mod(10,3) from dual; select mod(10,2) from dual; select mod(10,0) from dual; | 1 0 10 |
power(m,n) | m的n次方 | select power(2,2) from dual; select power(2,3) from dual; select power(2,0) from dual; | 4 8 1 |
round(n,m) | 将n四舍五入,保留小数点后m位 | select round(13.55555,3) from dual; | 13.556 |
sign(n) | n>0,则返回1, n=0,则返回0, n<0,则返回-1 | select sign(2) from dual; select sign(0) from dual; select sign(-2) from dual; | 1 0 -1 |
sqrt(n) | n的平方根 | select sqrt(25) from dual; select sqrt(3) from dual; | 5 1.73205080756888 |
abs(n) | 计算n的绝对值 | SELECT ABS(-11.1) FROM dual; SELECT ABS(3.5) FROM dual; | 11.1 3.5 |
函数 | 含义 | 示例 | 结果 |
---|---|---|---|
trunc(m,n) | 数据截取 n如果是日期标识,则截取日期 n如果是数字,则截取长度。 | select trunc(to_date(‘2022-08-31’,‘YYYY-MM-DD’),‘YYYY’) from dual; select trunc(to_date(‘2022-08-31’,‘YYYY-MM-DD’),‘MM’) from dual; select trunc(to_date(‘2022-08-31’,‘YYYY-MM-DD’),‘DD’) from dual; select trunc(13.555555,3) from dual; | 2022/1/1 2022/8/1 2022/8/31 13.555 |
substr(char,m,n) | 字符串截取 m表示起始下标 n表示长度 | select substr(‘xiangjiao’,0,5) from dual; | xiang |
CONCAT (char1, char2) | 两个字符的拼接 | select CONCAT ('xiangjiao ', ‘bunana’) from dual; | xiangjiao bunana |
initcap(char) | 字符串首字母大写 | select initcap(‘xiangjiao’) from dual; | Xiangjiao |
lower(char) | 所有 字符串字符小写转换 | select lower(‘XIANGJIAO’) from dual; | xiangjiao |
UPPER(string) | 所有 字符大写 | select upper(‘xiangjiao’) from dual; | XIANGJIAO |
replace(char,str1,str2) | 将char 中的str1 字符替换成str2 | select replace(‘xiangjiao is bunana’,‘bu nana’,‘banana’) from dual; | xiangjiao is ba nana |
length(char) | 计算字符串长度 | select length(‘xiangjiao’) from dual; | 9 |
nvl(d,m) | 空值替换 | select nvl(null,0) from dual; select nvl(2,0) from dual; | 0 2 |
decode(d,a,b,c) | 值对比替换 如果 d == a ,则输出b ,否则输出c | select decode(‘400030’,‘400030’,‘66666’,‘9999999’) from dual; select decode(‘111111’,‘400030’,‘66666’,‘9999999’) from dual; | 66666 9999999 |
双竖线 | 并置运算符(字符拼接) |
markdowm语法干扰,最后一个案例以截图展示。
函数 | 含义 | 示例 | 结果 |
---|---|---|---|
sysdate | 获取系统时间 | select sysdate from dual; | 2022/8/31 18:39:40 |
last_day | 月份的最后一天 | select last_day(sysdate) from dual; select last_day(date’2022-07-15’) from dual; | 2022/8/31 18:42:08 2022/7/31 |
add_months(d,n) | 月份增加n后的日期 n为正数,表示向后推 n为负数,表示前推 | select add_months(date’2022-07-15’,5) from dual; select add_months(date’2022-07-15’,0) from dual; select add_months(date’2022-07-15’,-6) from dual; | 2022/12/15 2022/7/15 2022/1/15 |
months_between(d,n) | 两个日期间隔月数(注意d和n的顺序) | select months_between(date’2022-04-15’,date’2022-07-1’) from dual; select months_between(date’2022-07-1’,date’2022-04-15’) from dual; | -2.54838709677419 2.54838709677419 |
函数 | 含义 | 示例 | 结果 |
---|---|---|---|
least | 获取集合中的最小值 | select least(2,4,1,5) from dual; | 1 |
greatest | 获取集合中的最大值 | select greatest(2,4,1,5) from dual; | 5 |
扩展:
这里的集合数据,不一定非要是整数型!
如:获取日期集合中的最小值。
select
least(to_date('2022-09-03','YYYY-MM-DD'),
to_date('2022-09-01','YYYY-MM-DD'),
to_date('2022-09-20','YYYY-MM-DD'))
from dual;
trunc
函数,通常用于字段、数据、日期等的截取。常见的几种使用方式如下所示:
描述 | sql | 结果 |
---|---|---|
获取年初时间 | select trunc(date’2022-12-12’,‘YYYY’) from dual; | 2022-01-01 |
获取月份第一天 | select trunc(date’2022-12-12’,‘MM’) from dual; | 2022-12-01 |
获取指定日期的年月日 | select trunc(date’2022-12-12 12:07:34’,‘dd’) from dual; | 2022-12-12 |
获取指定日期所在星期的第一天(星期天 ) | select trunc(date’2022-12-12 12:07:34’,‘d’) from dual; | 2022-12-11 |
获取当前日期所在季度 的第一天日期 | select trunc(date’2022-12-12 09:07:34’,‘Q’) from dual; | 2022-10-01 |
【扩展】获取日期所在的季度
select to_char(date'2022-12-12 09:07:34','Q') from dual;
4
trunc
截取数字,可以保留小数后几位等操作。
但需要注意的是:
不会四舍五入
!
描述 | sql | 结果 |
---|---|---|
默认截取整数 | SELECT trunc(2345.678) FROM dual; | 2345 |
截取小数点后一位 | SELECT trunc(2345.678,1) FROM dual; | 2345.6 |
截取小数点前一位 | SELECT trunc(2345.678,-1) FROM dual; | 2340 |