目录
一、数值函数
1.ABS(value):绝对值
2.CEIL(value):向上取整
3.FLOOR(value):向下取整
4.ROUND(value):四舍五入
5.MOD(value(被除数),divisor(除数)):求模
6.SIGN(value):判断正(0)负(-1)和零(0)
7.POWER(value,exponent):求幂
8.SQRT(value):求平方根
9.TRUNC(value,precision):按照 precision 截取 value
10.TO_CHAR(数值,补齐)
11.random:随机数
12. EXP(value):e 的 value 次幂
二、字符串函数
1.LENGTH():求字符串的长度
2.LAPD:使用指定的字符在字符的左边填充
3.RPAD:使用指定的字符在字符的右边填充
4.UPPER:字符串大写
5.INITCAP:将字符串的第一个字母变为大写,其他变为小写
6.LOWER:字符串小写
7.TRIM:截取掉前面或后面的字符串
8.LTRIM:从左边截取掉指定的字符
9.RTRIM:从右边截取掉指定的字符
10.SUBSTR:从第几个位置开始截取几个字符
11.instr(sourceString,destString,start,appearPosition)
12.reverse:字符串反转
13.CONCAT与||
14.WM_CONCAT
15.REGEXP_REPLACE:正则匹配替换
三、日期函数
1.SYSDATE:系统日期时间
2.SYSTIMESTAMP
3.ADD_MONTH(date,number):给日期添加/减少月份
4.GREATEST(date1, date2, . . .):从日期列表中选择最晚的日期
5.LEAST(date1,date2,...):从日期列表中选择最早的日期
6.LAST_DAY(date):本月的最后一天
7.MONTHS_BETWEEN(date1,date2):给出 date2 - date1 的月数(可以是小数)
8.NEXT_DAY( date, ‘day’)
9.NEW_TIME
10.ROUND
11.TRUNC
四、转换函数
1.时间戳转日期
2.日期转字符串
3.字符串转日期
4.字符串转数字
五、换行函数(与Mysql一样)
六、分析函数(窗口函数,与Mysql8一样)
七、集合运算
一、数值函数
函数名 | 说明 |
ABS(value) | 绝对值 |
CEIL(value) | 向上取整;大于或等于 value 的最小整数 |
FLOOR(value) | 向下取整;小于或等于 value 的最小整数 |
ROUND(value,precision) | 按precision精度4舍5入 |
MOD(value,divisor) | 求模 |
SIGN(value) | value 为正返回 1 ,为负返回 -1 ,为零返回 0 . |
POWER(value,exponent) | value 的 exponent 次幂 |
SQRT(value) | value 的平方根 |
TRUNC(value,precision) | 按照 precision 截取 value |
TO_CHAR() | 数值转换为字符串 |
random | 随机数 |
EXP(value) | e 的 value 次幂 |
SIN(value) | 余弦 |
SINH(value) | 反余弦 |
COS(value) | 余弦 |
COSH(value) | 反余弦 |
TAN(value) | 正切 |
TANH(value) | 反正切 |
LN(value) | value 的自然对数 |
LOG(value) | value 的以 10 为底的对数 |
1.ABS(value):绝对值
-- 绝对值
select abs(-128) from DUAL; -- 128
select abs(-128.36) from DUAL; -- 128.36
2.CEIL(value):向上取整
-- 向上取整
SELECT CEIL(12.65) FROM DUAL;-- 13
SELECT CEIL(-12.65) FROM DUAL; -- -12
3.FLOOR(value):向下取整
-- 向下取整
SELECT FLOOR(12.65) FROM DUAL;-- 12
SELECT FLOOR(-12.65) FROM DUAL; -- -13
4.ROUND(value):四舍五入
-- 四舍五入
select round(45.6577, 2) from DUAL; -- 45.66
select round(123.754) from DUAL; -- 124,不写保留位数,默认为0
select round(123.754, 0) from DUAL; -- 124
5.MOD(value(被除数),divisor(除数)):求模
-- 求模
select mod(32, 7) from DUAL;-- 4
select mod(30, 5) from DUAL;-- 0
6.SIGN(value):判断正(0)负(-1)和零(0)
-- 判断正负数
select sign(12) from DUAL; -- 正数为1
select sign(-9.6) from DUAL; -- 负数为-1
select sign(0) from DUAL; -- 0就是0
7.POWER(value,exponent):求幂
-- 求幂
select power(2, 3) from DUAL;-- 8
SELECT POWER(-2,4) FROM DUAL;-- 16
SELECT POWER(-2,5) FROM DUAL;-- -32
SELECT POWER(4,-2) FROM DUAL; -- 0.0625
SELECT POWER(-2,-3) FROM DUAL; -- -0.125
8.SQRT(value):求平方根
-- 开平方根
select sqrt(2) from DUAL;-- 1.41421
select sqrt(4) from DUAL; --2
select SQRT(0.09)from DUAL; -- 0.3
9.TRUNC(value,precision):按照 precision
截取 value
-- 截取小数点后的几位
select trunc(123.5678, 2) from DUAL;-- 123.56
select trunc(123.5678) from DUAL;-- 保留整数位
10.TO_CHAR(数值,补齐)
-- 数值转换为字符串,长度不够的用0补齐
select to_char(123.45, '000.00') from DUAL;-- 123.45
select to_char(123.45, '0000.000') from DUAL; -- 0123.450
select to_char(45165567541.78, 'L00,000,000,000.00') from DUAL;-- ¥45,165,567,541.78
select to_char(45165567541.78, '$00,000,000,000.00') from DUAL;-- $45,165,567,541.78
11.random:随机数
-- 随机值
-- 获取[0,9]之间的随机小数
SELECT dbms_random.VALUE(1,9) FROM DUAL;
-- 1.5293865911947350818736624183542672884
-- 获取[0,9]之间的随机整数
SELECT TRUNC(dbms_random.VALUE(0,9)) FROM DUAL;
-- 7
12. EXP(value):e
的 value
次幂
select exp(0) from DUAL;-- 1
select exp(1) from DUAL;-- 2.71828182845904523536028747135266249776
二、字符串函数
函数名 | 说明 |
LENGTH | 以字符给出字符串的长度 |
LPAD | 使用指定的字符在字符的 左边填充 |
RPAD | 使用指定的字符在字符的 右边填充 |
UPPER | 将字符串变为 大写 |
INITCAP | 将字符串的第一个字母变为大写, 其他变为小写 |
LOWER | 将字符串转换成 小写 |
TRIM | 裁剪 掉前面或后面的字符串 |
LTRIM | 在左边裁剪 掉指定的字符 |
RTRIM | 在右边裁剪 掉指定的字符 |
SUBSTR | 从第几个位置开始截取几个字符 |
INSTR | 找出某个字符串的 位置 |
INSTR2 | 等同于INSTR |
REVERSE | 字符串反转 |
CONCAT | 拼接两个字符串,与 || 相同 |
WM_CONCAT | 分组字符串拼接 |
REPLACE | 执行字符串搜索和 替换 |
REGEXP_REPLACE | 通过正则替换字符串内容 |
ASCII | 返回对应字符的十进制值 |
CHR | 给出十进制返回字符 |
INSTRB | 找出某个字符串的 位置 和 字节数 |
LENGTHB | 以字节给出字符串的长度 |
SUBSTRB | 取字符串的子串(以字节) |
SOUNDEX | 返回一个同音字符串 |
TRANSLATE | 执行字符串搜索和 替换 |
1.LENGTH():求字符串的长度
-- 求字符串长度
SELECT LENGTH('ASDSADJFMDKOA') FROM DUAL;-- 13
SELECT ID, LENGTH(ID), name, LENGTH(NAME) FROM teacher;
2.LAPD:使用指定的字符在字符的左边填充
SELECT LPAD('abc',6,'-') from DUAL;-- ---abc
3.RPAD:使用指定的字符在字符的右边填充
SELECT RPAD('abc',6,'-') from DUAL;-- abc---
4.UPPER:字符串大写
SELECT upper('abc') from DUAL;-- ABC
5.INITCAP:将字符串的第一个字母变为大写,其他变为小写
SELECT INITCAP('abcNAMe') FROM DUAL;-- Abcname
6.LOWER:字符串小写
SELECT LOWER('ABCD') from DUAL;-- abcd
7.TRIM:截取
掉前面或后面的字符串
SELECT LENGTH(' hello java ') FROM DUAL;-- 14
SELECT TRIM(' hello java ') FROM DUAL;--hello java
SELECT LENGTH(TRIM(' hello java ')) FROM DUAL;-- 10
8.LTRIM:从左边截取
掉指定的字符
SELECT LTRIM(' hello java ') FROM DUAL;--hello java
SELECT LENGTH(LTRIM(' hello java ')) FROM DUAL;-- 12
9.RTRIM:从右边截取掉指定的字符
SELECT RTRIM(' hello java ') FROM DUAL;-- hello java
SELECT LENGTH(RTRIM(' hello java ')) FROM DUAL;-- 12
10.SUBSTR:从第几个位置开始截取几个字符
-- 从第1位开始截取4位
SELECT SUBSTR('zhangsan',0,4) FROM DUAL;-- zhan
-- 从第1位开始截取4位
SELECT SUBSTR('zhangsan',1,4) FROM DUAL;-- zhan
-- 从第3位开始截取2位
SELECT SUBSTR('zhangsan',3,2) FROM DUAL;-- an
-- 从倒数第5位往右截取3位
SELECT SUBSTR('zhangsan',-5,3) FROM DUAL;-- ngs
11.instr(sourceString,destString,start,appearPosition)
instr('源字符串' , '目标字符串' ,'开始位置','第几次出现')
SELECT INSTR('zhangsan','a') FROM DUAL;-- 3
SELECT INSTR('zhangsan','a',2,2) FROM DUAL;-- 7
SELECT INSTR2('zhangsanS','s',2) FROM DUAL;-- 6
12.reverse:字符串反转
-- 字符串反转
SELECT reverse('123456') from DUAL;-- 654321
13.CONCAT与||
SELECT CONCAT('hel','lo') FROM DUAL;--hello
SELECT 'hel'||'lo' FROM DUAL;-- hello
14.WM_CONCAT
SELECT
t1.NAME AS '区域', wm_concat(t2.NAME) AS '地址'
FROM T_AREA t1
LEFT JOIN T_ADDRESS t2 ON t2.AREAID = t1.ID
GROUP BY t1.NAME;
15.REGEXP_REPLACE:正则匹配替换
三、日期函数
函数名 | 说明 |
SYSDATE | 系统日期时间 |
SYSTIMESTAMP | 系统日期时间,精确到小数秒 |
ADD_MONTHS(date,number) | 在日期 date 上增加 count 个月 |
GREATEST(date1, date2, . . .) | 从日期列表中选出最晚 的日期 |
LEAST( date1, date2, . . .) | 从日期列表中选出最早 的日期 |
LAST_DAY( date ) | 返回日期 date 所在月的最后一天 |
MONTHS_BETWEEN(date2, date1) | 给出 date2 - date1 的月数(可以是小数) |
NEXT_DAY( date, ‘day’) | 给出日期 date 之后下一天的日期,这里的 day 为星期,如:MONDAY 、Tuesday 等。 |
NEW_TIME(date, ‘this’, ‘other’) | 给出在 this 时区 = Other 时区 的日期和时间 |
ROUND(date,’format’) | 未指定 format 时,如果日期中的时间在中午之前,则将日期中的时间截断为 12 A.M (午夜,一天的开始),否则进到第二天。 |
TRUNC(date,’format’) | 未指定 format 时,将日期截为 12 A.M (午夜,一天的开始) |
1.SYSDATE:系统日期时间
SELECT SYSDATE FROM DUAL;-- 2022-12-14 20:56:12
2.SYSTIMESTAMP
SELECT SYSTIMESTAMP FROM DUAL;-- 2022-12-14 20:56:31.819923 +08:00
3.ADD_MONTH(date,number):给日期添加/减少月份
-- 给当前日期添加1个月
SELECT ADD_MONTHS(SYSDATE,1) FROM DUAL;-- 2023-01-14 20:58:50
-- 给当前日期减少2个月
SELECT ADD_MONTHS(SYSDATE,-2) FROM DUAL;-- 2022-10-14 20:58:57
4.GREATEST(date1, date2, . . .):从日期列表中选择最晚的日期
-- 从日期列表中选出最晚的日期
SELECT GREATEST(TO_DATE('2021-01-01','YYYY-MM-DD'),TO_DATE('2022-01-01','YYYY-MM-DD')) FROM DUAL;-- 2022-01-01 00:00:00
SELECT GREATEST(SYSDATE,ADD_MONTHS(SYSDATE,1)) FROM DUAL;-- 2023-01-14 21:04:24
5.LEAST(date1,date2,...):从日期列表中选择最早的日期
-- 从日期列表中选出最早的日期
SELECT LEAST(SYSDATE,ADD_MONTHS(SYSDATE,1)) FROM DUAL;-- 2022-12-14 21:04:55
6.LAST_DAY(date):本月的最后一天
-- 本月的最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL;-- 2022-12-31 22:00:27
7.MONTHS_BETWEEN(date1,date2):给出 date2 - date1 的月数(可以是小数)
--给出 date2 - date1 的月数(可以是小数)
SELECT MONTHS_BETWEEN(SYSDATE,ADD_MONTHS(SYSDATE,1)) FROM DUAL;-- -1
SELECT MONTHS_BETWEEN(TO_DATE('2022-01-01','YYYY-MM-DD'),TO_DATE('2020-05-21','YYYY-MM-DD')) FROM DUAL;
-- 19.35483870967741935483870967741935483871
8.NEXT_DAY( date, ‘day’)
-- 按照美国时间,周日是周一,所以2022-12-14的下周二为2022-12-19(相当于中国的下周一)
SELECT NEXT_DAY(SYSDATE,2) FROM DUAL;-- 2022-12-19 21:08:25
9.NEW_TIME
【参数】:c1,c2对应的 时区及其简写 大西洋标准时间:AST或ADT 阿拉斯加_夏威夷时间:HST或HDT 英国夏令时:BST或BDT 美国山区时间:MST或MDT 美国中央时区:CST或CDT 新大陆标准时间:NST 美国东部时间:EST或EDT 太平洋标准时间:PST或PDT 格林威治标准时间:GMT Yukou标准时间:YST或YDT
--给出时间dt1在c1时区对应c2时区的日期和时间
SELECT NEW_TIME(SYSDATE,'NST','BST') FROM DUAL;
-- 2022-12-14 14:33:41
10.ROUND
参考博文:Oracle中的ROUND( )日期四舍五入函数_编码不能停的CSDN博客
--讲解:年份按**1-6月和7-12月**四舍五入到最近的 几几年1月
select round(to_date('6-2月-13'),'year') from dual;
select round(to_date('6-5月-13'),'year') from dual;
select round(to_date('6-7月-13'),'year') from dual;--讲解:月份按**1-15日和16-30日**四舍五入到最近的 几月1日
select round(to_date('15-2月-13'),'month') from dual;
select round(to_date('16-2月-13'),'month') from dual;--讲解:天数按**周一至周三 和 周四至周日 **四舍五入到最近的 周日
-- 2017年6月21是周三 运行结果是:2017/6/18 上周日
select round(to_date('21-6月-2017'),'day') from dual;
-- 2017年6月22是周四 运行结果是:2017/6/25 下周日select round(to_date('22-6月-2017'),'day') from dual;
11.TRUNC
-- 按日截取
select TRUNC(sysdate) from dual;
-- 当年第一天
select TRUNC(sysdate, 'yyyy') from dual;
-- 当月第一天
select TRUNC(sysdate, 'mm') from dual;
-- 按小时截取
select TRUNC(sysdate, 'hh') from dual;
-- 按分钟截取
select TRUNC(sysdate, 'mi') from dual;
四、转换函数
1.时间戳转日期
-- TIMESTAMP 转 DATE
SELECT TO_DATE(TO_CHAR(SYSDATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd HH24:mi:ss')
FROM DUAL;
--2022-12-14 23:23:22
-- TIMESTAMP 转 DATE
SELECT CAST(SYSDATE AS DATE)
FROM DUAL;
-- 2022-12-14 23:23:31
2.日期转字符串
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;--2022-12-14
select TO_CHAR(sysdate, 'yyyy-mm-dd hh:mi:ss') from dual;-- 2022-12-14 11:24:55
SELECT TO_CHAR(SYSDATE, 'YYYY') || '年'
|| TO_CHAR(SYSDATE, 'MM') || '月'
|| TO_CHAR(SYSDATE, 'DD') || '日'
FROM DUAL;-- 2022年12月14日
3.字符串转日期
SELECT TO_DATE('2022-12-14','YYYY-MM-DD') FROM DUAL;--2022-12-14 00:00:00
4.字符串转数字
SELECT TO_NUMBER('1000')+10 FROM DUAL;--1010
五、换行函数(与Mysql一样)
可以参考我的另一篇博文Mysql学习——行与列的多种转换_雷神乐乐的博客-CSDN博客
六、分析函数(窗口函数,与Mysql8一样)
可以参考我的另一篇博文mysql8高级——窗口函数与常用日期时间函数_雷神乐乐CSDN博客
七、集合运算
函数 | 名称 | 说明 |
---|---|---|
UNION ALL | 并集 | 返回各个查询的所有记录,包括重复 记录。 |
UNION | 并集 | 返回各个查询的所有记录,不包括重复 记录。 |
INTERSECT | 交集 | 返回两个查询 共有 的记录。 |
MINUS | 差集 | 返回第一个查询检索出的记录 减去 第二个查询检索出的记录之后 剩余 的记录。 |