Oracle常用数学、日期、字符串函数

大标 2022年3月16日15:08:16
评论
15

为了日常使用,这里总结一些常用的oracle函数。

数学函数

函数名 说明
ABS(n) 返回数值 n 的绝对值
CEIL(n) 向上取整
FLOOR(n) 向下取整
MOD(n1, n2) 返回n1除以n2的余数
POWER(n1, n2) 返回n1的n2次方
SIGN(n) 判断n,大于0返回1,小于0返回-1,等于0返回0
SQRT(n) 返回n的平方根
ROUND(n) 对n四舍五入
TRUNC(n1, n2) 截取精度,n1保留n2个小数

例子

select ABS(-5) from dual;	-- 返回 5
select ABS(2.35) from dual;	-- 返回 3
select POWER(2,5) from dual;	-- 返回2的5次方
select TRUNC(3.1415926,2) from dual;	-- 返回3.14

日期函数

介绍一些日常用到的函数

函数 说明
syadate 系统时间
to_date(ch, fmt) 将字符串ch,按fmt格式,转成date类型
to_char(n ...) 是返回字符串;(to_char是用法很多)
trunc(date, fmt) 截断到最接近的日期,单位为天 ,返回的是日期类型
round(date, fmt) 舍入到最接近的日期
next_day(date,ch) 返回下个星期的日期, ch为1-7,代表星期日到星期六
last_day(date) 返回指定日期d所在月份的最后一天

fmt 日期格式

常见代表符号:yyyy 年,mm 月,dd 日,hh 12小时制,24hh 24小时制,mi 分钟,ss 秒,day 星期

日期函数用于处理date类型的数据,两个日期相减返回日期之间相差的天数。

1、日期和字符串相互转换

select syadate from dual;	--获取系统时间
select to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss\') from dual;   --日期转化为字符串   
select to_char(sysdate,\'yyyy\') from dual;   --获取时间的年   
select to_char(sysdate,\'mm\') from dual;   --获取时间的月   
select to_char(sysdate,\'dd\') from dual;   --获取时间的日   
select to_char(sysdate,\'hh24\') from dual;   --获取时间的时   
select to_char(sysdate,\'mi\') from dual;   --获取时间的分   
select to_char(sysdate,\'ss\')  from dual;  --获取时间的秒
-- 返回日期时间类型
select to_date(\'2004-05-07 13:23:44\',\'yyyy-mm-dd hh24:mi:ss\')    from dual

to_date(ch, fmt) 是将字符串ch,按fmt格式,转成date类型

to_char 是返回字符串;(to_char是用法很多)

2、求某天是星期几

select to_char(to_date(\'2022-03-16\',\'yyyy-mm-dd\'),\'day\') from dual; --星期三

3、求两个日期间的天数

select floor(sysdate - to_date(\'20220306\',\'yyyymmdd\')) from dual; 	--10

4、求当前日期的前一天

select to_char(trunc(sysdate-1),\'yyyy-mm-dd\') from dual;

5、计算时间差

oracle时间差是以天数为单位,所以换算成年月,日

select floor(to_number(sysdate-to_date(\'2022-03-16 15:55:03\',\'yyyy-mm-dd hh24:mi:ss\'))/365) as spanYears from dual        --时间差-年
select ceil(moths_between(sysdate-to_date(\'2022-03-16 15:55:03\',\'yyyy-mm-dd hh24:mi:ss\'))) as spanMonths from dual        --时间差-月
select floor(to_number(sysdate-to_date(\'2022-03-16 15:55:03\',\'yyyy-mm-dd hh24:mi:ss\'))) as spanDays from dual             --时间差-天
select floor(to_number(sysdate-to_date(\'2022-03-16 15:55:03\',\'yyyy-mm-dd hh24:mi:ss\'))*24) as spanHours from dual         --时间差-时
select floor(to_number(sysdate-to_date(\'2022-03-16 15:55:03\',\'yyyy-mm-dd hh24:mi:ss\'))*24*60) as spanMinutes from dual    --时间差-分
select floor(to_number(sysdate-to_date(\'2022-03-16 15:55:03\',\'yyyy-mm-dd hh24:mi:ss\'))*24*60*60) as spanSeconds from dual --时间差-秒

6、求月份第一天、最后一天

--这个月的第一天,返回 2022-03-01 00:00:00
SELECT Trunc(SYSDATE, \'MONTH\')  FROM dual; 
-- 这个月的最后一天,返回 2022-03-31 23:59:59
SELECT  LAST_DAY(Trunc(SYSDATE, \'MONTH\')) + 1 - 1 / 86400 FROM dual;
-- 上个月的第一天,返回 2022-02-01 00:00:00
SELECT Trunc(Trunc(SYSDATE, \'MONTH\') - 1, \'MONTH\')  FROM dual;	
-- 上个月的最后一天,返回 2022-02-28 23:59:59
SELECT Trunc(SYSDATE, \'MONTH\') - 1 / 86400 FROM dual;

字符函数

1、字符串截取

select substr(\'abcdef\',1,3) from dual; -- abc

2、查找子串位置

select instr(\'abcdefgigklmn\',\'de\') from dual; -- 4

3、字符串连接

select \'HELLO\'||\'hello world\' from dual; -- HELLOhello world

4、计算字符串长度

select length(\'abcdefg\') from dual; -- 7

5、去掉字符串中的空格

select ltrim(\' abc\') from dual;	-- 去掉左边空格
select rtrim(\'zhang \') from dual; -- 去掉右边空格
select trim(\' zhang san \') from dual;	-- 去掉左右两边的空格

6、去掉前缀和后缀

select trim(leading 9 from 998234891299) from dual; --8234891299
select trim(trailing 9 from 998234891299) from dual; --9982348912
select trim(9 from 998234891299) from dual;		-- 82348912

7、替换字符

select replace(\'abcad\',\'a\',\'xyz\') from dual; -- xyzbcxyzd
select translate(\'abcad\',\'1\',\'xyz\') from dual; -- xbcxd

8、initcap(ch)首字母大写、 lower(ch)变小写、upper(ch)变大写

select lower(\'ABC\') s1, 
       upper(\'def\') s2, 
       initcap(\'efg\') s3
   from dual;

9、lpad(expr1, n, expr2) 左添充、 rpad(expr1, n, expr2) 右填充 用于控制输出格式

select lpad(\'func\',10,\'=\') from dual; -- ======func
select rpad(\'func\',10,\'=\') from dual; -- func======
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
大标
  • 本文由 发表于 2022年3月16日15:08:16
  • 转载请务必保留本文链接:https://www.tanhuibiao.com/script/oracle/4705.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: