Oracle 入门
时间: 2020-05-27来源:OSCHINA
前景提要
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
1. 基本分页
一条select rownum 只能使用 < 和 <= (rownum是在查询语句扫描每条记录时产生)
-- 分页
--- 基本分页
--1.查询所有台账表
select * from t_account
--2.查询所有台账表,含rownum
select rownum r, a.* from t_account a
--3.第一页
select rownum, a.* from t_account a where rownum <=10
--4.第二页 , rownum 在处理每行数据时生产,不能使用大于号>
--select t.* from A t
--where t.r > 10 and t.r <=20
select t.* from ( select rownum r, a.* from t_account a ) t
where t.r > 10 and t.r <=20
分页 + 排序
--- 排序 + 分页
--1. 查询所有 + 排序
select * from t_account order by usenum desc
--2. 结果 --> + rownum
-- select rownum r, t.* from () t
select rownum r , t.* from (
select * from t_account order by usenum desc
) t
--3. 结果 --> 分页条件
-- select * from B t2
-- where t2.r > 10 and t2.r <= 20
select * from (
select rownum r , t.* from (
select * from t_account order by usenum desc
) t
) t2
where t2.r > 10 and t2.r <= 20
2 单行函数

1.1 字符函数

--- 字符函数
--1 字符串拼接 dual
select concat('abc','d') from dual;
select 'abc' || '123' from dual;
--2 首字母大写:将一个单词首字母转换成大写,其他字母转换成小写
select initcap('hEllo') from dual;
--3 找出字符串位置,从1开始计数
select instr('hello','e') from dual;
--4 字符串长度
select length('abcd') from dual;
--5 替换 repacle(字符串, 被替换内容, 替换内容)
select replace('hello hello','e','x') from dual;
--6 截取字符串
-- substr('字符串',起始位置) 从‘起始位置’截取到最后
-- substr('字符串',起始位置,长度)
select substr('abcde',2) from dual;
select substr('abcde',2,2) from dual;
--7 去除两端空格
select length(' abcde ') from dual;
select length( trim(' abcde ') ) from dual;
--8 转换小写
select lower('hEllo') from dual;
--9 转换大写
select upper('hEllo') from dual;
1.2 数值函数

--- 数值函数
--1 ceil 向上取整
select ceil(12.1) from dual;
select ceil(12.9) from dual;
--2 floor 向下取整
select floor(12.1) from dual;
select floor(12.9) from dual;
--3 round 四舍五入
-- round(数值) 对数值四舍五入,没有小数位
-- round(数值,精度) 保留小数位数进行四舍五入
select round(12.1) from dual;
select round(12.9) from dual;
-- 12.35
select round(12.3456,2) from dual;
--4 取模 10 % 3
select mod(10,3) from dual;
--5 截取
-- 12.34
select trunc(12.3456,2) from dual;
1.3 日期函数

--- 日期函数
--1 当前系统时间
select sysdate from dual;
--2 add_months 添加count个月
select add_months(sysdate,-2) from dual;
--3 last_day 本月最后一天
select last_day(sysdate) from dual;
--4 to_date 将字符串转换日期
select to_date('20200401','yyyymmdd') from dual;
select '20200401' from dual;
-- 4月份最后一天
select last_day(to_date('20200401','yyyymmdd')) from dual;
--5 months_between 获得两个日期之间月数
select months_between( to_date('2020-05-31 23:59:59','yyyy-mm-dd hh24:mi:ss') , to_date('20200401','yyyymmdd') ) from dual;
-- 你今年几岁了?
-- 1) 获得出生日期距离今日月数
select months_between( sysdate , to_date('20000624','yyyymmdd') ) from dual;
-- 2) 获得出生日期距离今日年数(含小数位)
select months_between( sysdate , to_date('20000624','yyyymmdd') ) / 12 from dual;
-- 3) 向上取值 19.8 --> 20
select ceil ( months_between( sysdate , to_date('20000624','yyyymmdd') ) / 12 ) from dual;
-- 4) 拼接“岁”字符串
select ceil ( months_between( sysdate , to_date('20000624','yyyymmdd') ) / 12 ) || '岁' from dual;
-- 6 下一个指定日期 next_day(日期, 星期)
-- 星期日为一周的第一天,可以使用1表示
select next_day( sysdate , '星期日') from dual;
select next_day( sysdate , 1) from dual;
-- 7 四舍五入日期格式化
-- yyyy 四舍五入年,返回日期,有效数据是年,不需要考虑月和日
select round( sysdate , 'yyyy') from dual;
-- mm 四舍五入月,返回日期,有效数据是月,不需要考虑日
select round( sysdate , 'mm') from dual;
-- 8 格式化
-- 一年的第一天
select trunc( sysdate , 'yyyy') from dual;
-- 这个月的第一天
select trunc( sysdate , 'mm') from dual;
-- 这个星期的第一天
select trunc( sysdate , 'day') from dual;
1.4 转换函数
---转换函数
-- 1. to_char 将日期转换字符串
-- yyyy 年
-- mm 月
-- dd 日
-- hh 时(12小时制)
-- hh24 时
-- mi 分
-- ss 秒
select to_char(1024) from dual;
select to_char( sysdate , 'yyyy-mm-dd hh:mi:ss') from dual;
select to_char( to_date('2020-05-27 20:27:42', 'yyyy-mm-dd hh24:mi:ss') , 'yyyy-mm-dd hh24:mi:ss') from dual;
-- 2. to_date 将字符串转换日期
-- 3. to_number 将数字字符串转换数字
select to_number('1024') from dual;
select to_number('1024.24') from dual;
1.5 其他函数

--- 其他函数
-- 1 nvl(字段, 如果为null显示数据 )
select nvl(t.usenum,0), t.* from t_account t
-- 2 nvl2(字段, 不为null显示,为null显示)
select nvl2(t.usenum,100, 0), t.* from t_account t;
-- nvl2(t.usenum,t.usenum, 0) 等效 nvl(t.usenum,0)
select nvl2(t.usenum,t.usenum, 0), t.* from t_account t
-- 3 decode 相当于 java switch
select decode(id,1,'哈哈',2,'嘿嘿',3,'嘿嘿嘿') from t_area;
--select decode(sex,1,'男',0,'女') from t_user;
2 分析函数
-- 分析函数--排名
insert into book(bid,title) values(1,'100');
insert into book(bid,title) values(2,'98');
insert into book(bid,title) values(3,'98');
insert into book(bid,title) values(4,'95');
insert into book(bid,title) values(5,'98');
insert into book(bid,title) values(6,'95');
commit;
-- 1 查询所有数据
select * from book;
-- 2 排名跳跃
select rank() over( order by b.title desc ) , b.* from book b;
-- 3 排名连续
select dense_rank() over( order by b.title desc ) , b.* from book b;
-- 4 连续的排序
select row_number() over( order by b.title desc ) , b.* from book b;

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行