Oracle函数部分

2025-01-19 12:47

一、函数的作用

  • 方便数据的统计

  • 处理查询结果

二、函数的分类

  • 数值函数

  • 字符函数

  • 日期函数

  • 转换函数

三、数值函数

Ⅰ、四舍五入

round(n[,m])
  • 省略m:0

  • m>0:小数点后m位

  • m<0:小数点前m位

select round(23.4),round(23.45,1),round(23.45,-1)from dual;

Ⅱ、取整函数

ceil(n)  --取最大值
floor(n) --取最小值
select ceil(23.45),floor(23.45) from dual;

结果:

CEIL(23.45) FLOOR(23.45)
----------- ------------
         24           23

Ⅲ、常用计算

abs(n)   --取绝对值

select abs(23.45),abs(-23),abs(0) from dual;

======

mod(m,n)  --取余数

select mod(5,2) from dual;

======

power(m,n)  --取m的n次幂

select power(2,3),power(null,2) from dual;

======

sqrt(n)   --求平方根

select sqrt(16) from dual;

======

Ⅳ、三角函数

sin(n),asin(n)
cos(n),acos(n)
tan(n),atan(n)   --提供弧度参数

select sin(3.124) from dual;

四、字符函数

Ⅰ、大小写转换函数

upper(char)   --转换为大写
lower(char)   --转换为小写
initcap(char)  --首字母大写

select upper('abde'),lower('ADe'),initcap('asd') from dual;

Ⅱ、获取子字符

substr(char,[m[,n]])   --获取子字符,分别是从哪取,从哪个位置开始取以及取出多少位,n省略时,从m的位置截取到结束,m从1开始如果m写0也是从第一个字符开始。如果m为负数时,从字符串的尾部开始截取

select substr('abcde',2,3),substr('abcde',2),substr('abcde',-2,1) from dual;

Ⅲ、获取字符串长度函数

length(char) --会包含空格的长度

select length('acd ') from dual;

Ⅳ、字符串连接函数

concat(char1,char2)   --与||作用一样

select concat('ab','cd') from dual;

Ⅴ、去除子串函数

trim(c2 from c1)   --代表从c1中去除c2字符串,就是子文本替换,要求c2中只能是一个字符

select trim ('a' from 'abcde') from dual;

======

ltrim(c1[,c2])    --从c1中去除c2,从左边开始去除,要求第一个就是要去除的字符,有多少个重复的该字符就会去除多少次

select ltrim('ababaa','a') from dual;

======

rtrim(c1[,c2])    --从c1中去除c2,要求右侧第一个就是要去除的字符,有多少个重复的该字符就会去除多少次

======

trim(c1)   --代表去除首尾的空格,删首尾空,同理ltrim和rtrim只有一个参数时。

======

replace(char,s_string[,r_string])  --替换函数,省略第三个参数则用空白替换

select replace('abcde','a','A') from dual;
select replace('abcde','c') from dual;
select replace('abced','ab','A') from dual;

五、日期函数

Ⅰ、系统时间

sysdate 默认格式:DD-MON-RR 天-月-年

Ⅱ、日期操作

add_months(date,i)  --用于添加指定的月份,返回在指定的日期上添加的月份,i可以是任意整数,如果i是负数,则是在原有的值上减去该月份了

select add_months(sysdate,3),add_months(sysdate,-3) from dual;

======

next_day(date,char)  --第二个参数指定星期几,在中文环境下输入星期X即可,返回下一个周几是哪一天。

select next_day(sysdate,'星期一') from dual;

======

last_day(date)   --用于返回日期所在月的最后一天

select last_day(sysdate) from dual;

======

month_between(date1,date2)  --计算两个日期之间间隔的月份,前者减后者

select months_between('20-5月-15','10-1月-15') from dual;

======

extract(date from datetime)   --返回相应的日期部分

select extract(year from sysdate) from dual;   --可以改month或者day
select extract(hour from timestamp '2015-10-1 17:25:13') from dual;

======

用于截取日期时间的trunc函数

用法:trunc(字段名,精度)

具体实例:

在表table1中,有一个字段名为sysdate,该行id=123,日期显示:2016/10/28 15:11:58

1、截取时间到年时,sql语句如下:

select trunc(sysdate,'yyyy') from table1 where id=123;  --yyyy也可用year替换

显示:2016/1/1

2、截取时间到月时,sql语句:

select trunc(sysdate,'mm') from table1 where id=123;

显示:2016/10/1

3、截取时间到日时,sql语句:

select trunc(sysdate,'dd') from table1 where id=123;

显示:2016/10/28

4、截取时间到小时时,sql语句:

select trunc(sysdate,'hh') from table1 where id=123;

显示:2016/10/28 15:00:00

5、截取时间到分钟时,sql语句:

select trunc(sysdate,'mi') from table1 where id=123;

显示:2016/10/28 15:11:00

6、截取时间到秒暂时不知道怎么操作

7、不可直接用trunc(sysdate,'yyyy-mm-dd'),会提示“精度说明符过多”

8.如果不填写第二个参数,则默认到DD,包含年月日,不包含时分秒。

六、转换函数

to_char(date[,fmt[,params]])  --date为需要转换的日期,fmt为转换的格式,params为转换的语言(通常默认会自动选择,可以省略,与安装语言一致)

默认格式:DD-MON-RR

可以定义的格式:

  • YY YYYY YEAR

  • MM MONTH

  • DD DAY

  • HH24 HH12

  • MI SS

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

======

to_date(char[,fmt[,params]])

select to_date('2015-05-22','yyyy-mm-dd') from dual;   --注意显示的时候仍然按照时间的默认格式来显示

======

to_char(number[,fmt])

fmt列表:

  • 9:显示数字并忽略前面的0

  • 0:显示数字,位数不足,用0补齐

  • .或D:显示小数点

  • ,或G:显示千分位

  • $:美元符号

  • S:加正负号(前后都可以)

select to_char(12345.678,'$99,999.999') from dual;
select to_char(12345.678,'s99,999.999') from dual;

======

to_number(char[,fmt])

fmt是转换的格式,可以省略

select to_number('$1,000','$9999') from dual;

七、一些课堂案例

Ⅰ、在查询中使用函数

  • 在员工信息表中查询员工的生日

substr(char[,m[,n]])
  • 将员工信息表中的年龄字段与10取余数

  • 取员工入职的年份

  • 查询出5月份入职的员工信息

===================================================================================

相关文章
热点文章
精彩视频
Tags

在线访客: 今日访问量: 昨日访问量: 总访问量:

×
请扫码支付

扫码支付后自动跳转查看