SQL函数
函数是SQL的一个非常强大的特性
1.对数据进行计算
2.修改单个数据项
3.操作行组的输出
4.格式化显示日期和数字
5.转换列数据类型函数
函数类型
1.单行函数只对单个行进行操作每行返回一个结果。
2.多行函数可以操作行组来为每组行提供一个结果。
单行函数
单行函数用于操作数据库项。它们接受一个或多个函数,并查询返回的没一行返回一个值。
1.可以返回,引用数据类型不同的数据值。
2.可用于select,where,and,order by;可以嵌套。
3.接受字符输入,可以同时返回字符或数字。
4.接受数字输入并返回值
5.日期:操作日期数据类型的值(months_between函数除外)
dual
dual表示一个伪表(虚拟表)是为了语法上的完整性
select * from dual
查询dual表的所有列(可以用dual表实验函数表达式)
大小写转换函数
转换字符串大小的函数
函数 | 结果 |
---|---|
lower() | 将选择参数转换为小写 |
upper () | 将选择参数转换为小写 |
initcap() | 将选择参数转换首字母为大写 |
字符控制函数
函数 | 结果 | 含义 |
---|---|---|
concat(‘hello,world’) | helloworld | 将值连接在一起使用(只能使用两个参数) |
substr(‘hello,world’,1,5) | hello | 截取一个确定长度的字符 |
length(‘hello,world’) | 10 | 显示字符的长度数值 |
instr(‘hello,world’,w) | 6 | 查找指定字符的数字位置 |
lpad(‘sal’,10,’*’) | *****24000 | 使用字符表达式从左填充到指定字符长度 |
rpad(‘sal’,10,’*’) | 24000***** | 使用字符表达式从右填充到指定字符长度 |
replace(‘jack and jue’,‘j’,‘bl’) | black and blue | 查找字符并替换 |
trim(‘x’xxxfrom’helloworldxxx’) | helloworld | 从字符串中修剪开头或结尾字符 |
数值函数
函数 | 结果 | 含义 |
---|---|---|
round(45.926,2) | 45.93 | 四舍五入到制定的十进制值 |
trunc(45.926,2) | 45.92 | 截断到制定十进制值 |
mod(1600,300) | 100 | 返回余数(1600/300) |
sysdate函数
sysdate是一个日期函数,它返回当前数据库服务器的日期和时间。
修改当前日期格式
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss day';
select sysdate from dual;
日期的算术运算
在日期上加减数字结果仍为日期
两个日期相减返回日期之间的相差天数
可以用小时数除以24,可以加小时到日期上
因为数据库将日期储存为数字,所以可以使用加法和减法等算术运算符执行计算。可以加减数字和日期。
日期操作函数
函数 | 结果 |
---|---|
months_between | 两个日期相差的约束 |
add_months | 向指定日期中加上若干月数 |
next_day | 指定日期的下一个日期 |
last_day | 本月的最后一天 |
round | 日期四舍五入 |
trunc | 日期阶段 |
日期的运算
select sysdate+1 from dual; 1天以后
select sysdate,sysdate+1/24 from dual; 1小时后
select sysdate,sysdate+1/24/60 from dual; 1分钟后
months_between
时间运算函数,相减结果 为月份
select empno,ename,sal, months_between(sysdate,hiredate) months
from emp;
add_months
日期增加月份
select sysdate,add_months(sysdate,1) from dual; 一个月后的现在
select sysdate,add_months(sysdate,-12) from dual; 一年前
next_day下一个
select next_day(sysdate,'MONDAY') from dual; 下周一 (当前时间)
last_day 日期增加月份
select sysdate,last_day(sysdate) from dual;
last_day 日期增加月份
select sysdate,trunc(sysdate) from dual; 今天
select sysdate,trunc(sysdate,'dd') from dual; 零点
select sysdate,trunc(sysdate,'mm') from dual; 本⽉的第⼀天
select sysdate,trunc(sysdate,'yyyy') from dual; 今年的第⼀天片