暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLED的SQL练习笔记(1)

起鼓隆冬强 2024-10-25
58

--rownum伪列
select rownum ,empno,ename,sal
from emp
where deptno=20;

--查询某表中的前五条数据(TOP N查询)
select rownum ,e.*
from emp e
where rownum<=5;

--rowid伪列
select rowid,rownum,e.*
from emp e;


--单行函数
select ename,upper(ename),lower(ename)
from emp;

--多行函数
select count(ename) from emp;


/*
字符函数
*/
--1.lower,upper:转换大小写
select lower(ename),upper(ename) from emp;

--2.initcap:单词首字母大写,其余小写
select initcap('this is a book') from dual;--This Is A Book

--3.concat(字符串1,字符串2):拼接字符串
select concat('hello','world') from dual;--helloworld

--4.substr(字符串,起始位置1[,截取个数]):截取一个字符串的子串,其实位置可以为负数,右数第n位
select substr ('abcdefg',3) from dual;--cdefg
select substr ('abcdefg',3,2) from dual;--cd
select substr('abcdefg',-3) from dual;--efg
select substr ('abcdefg',-3,2) from dual;--ef

--5.length:返回字符串长度
select length('abcd') from dual;--4
select length('') from dual;--null

--6.instr(字符串,查找子串[,起始位置[,第几次出现]]):查找字符串中子串的起始位置,如果找不到返回0
--起始位置也可以是负数(从右向左反向搜索)
select instr('abcdef','cd') from dual;--3
select instr ('abcdef','cdf') from dual;--0
select instr('ancdcdcd','cd') from dual;--3
select instr('ancdcdecd','cd',1) from dual;--3
select instr('ancdcdecd','cd',-1) from dual;--8
select instr('ancdcdecd','cd',-2) from dual;--8
select instr('ancdcdecd','cd',-1,2) from dual;--5
select instr('ancdcdecd','cd',1,2) from dual;--5
select instr('123456','34',1) from dual;--3


--7.lpad(字符串,固定长度,填充字符):左填充
-- rpad:(字符串,固定长度,填充字符):右填充
select lpad('abcd',7,'*') from dual;--***abcd
select lpad('abcd',3,'*') from dual;--abc
select rpad('abcd',7,'*') from dual;--abc***
select rpad('abcd',3,'*') from dual;--abc
select lpad('',3,'*') from dual;--null
select lpad(' ',3,'*') from dual;--*
select lpad('',3,'*') from dual;--null
select lpad('abcd',0.9,'*') from dual;--null

--8.trim(关键字 from 字符串):修剪字符串两边的关键字。
select trim ('a' from 'aabsdgbaa') from dual;--bsdgb
select 123 || ltrim (' aabsdgbaa ')||'123' from dual;--123aabsdgbaa 123
select 123 || rtrim (' aabsdgbaa ')||'123' from dual;--123 aabsdgbaa123
select ltrim ('aabsdgbaa','a') from dual;--bsdgbaa
select rtrim ('aabsdgbaa','a') from dual;--aabsdgb

--9.replace(字符串,查找字符串[,替换字符串]):替换字符串中的子串,默认是替换为空字符串。
select replace('abcdecde','cd') from dual;--abee
select replace('abcdecde','cd','*') from dual;--ab*e*e

--10.chr:把编码转换为字符。
select chr(97) from dual;--a

--11.ascii:把字符转换为编码
select ascii('A') from dual;--65

 

/*
数学函数
*/
--1.round(数字[,小数位数]):按照指定小数位数,四舍五入,默认保留到整数位。
select round(3.1415927) from dual;--3
select round(3.5415927) from dual;--4
select round(3.5415927,2) from dual;--3.54

--2.trunc(数字[,小数位数]):截断到指定位数,不四舍五入,默认保留到整数位。
select trunc(3.14158) from dual;--3
select trunc(3.5415927) from dual;--3
select trunc(3.5415927,2) from dual;--3.54
select trunc(-3.5) from dual;-- -3

--3.floor(数字):返回不大于本身的最大整数。
select floor(3.4) from dual;--3
select floor(-3.4) from dual;-- -4

--4.ceil(数字):进位取整。
select ceil(3.4) from dual;-- 4
select ceil(-3.4) from dual;-- -3

--5.mod(被除数,除数):求模
select mod(12,6) from dual;--0
select mod(12,5) from dual;--2


/*
日期函数
*/
--1.sysdate:返回当前系统的日期时间
SELECT SYSDATE FROM dual;--2017-11-13 19:06:12

--2.日期类型和数字类型可以做加减运算:一个日期加减一个数字返回的还是一个日期(单位是天)
SELECT SYSDATE+3 FROM dual;--2017-11-16 19:06:26
SELECT SYSDATE-3 FROM dual;--2017-11-10 19:06:26
SELECT SYSDATE+1/24/60*25 FROM dual;--25分钟之后

--3.一个日期减去另一个日期返回的是两个日期间隔的天数
select hiredate,trunc(sysdate-hiredate) 间隔天数 from emp;

--4.months_between(日期1,日期2):返回两个日期间隔多少个月


--5.add_months(日期,n):给一个日期加减若干个月,返回一个新日期,n为正数表示加,负数为减
select add_months(sysdate,3) from dual;--2018-02-13 19:13:46
select add_months(sysdate,-3) from dual;--2017-08-13 19:14:02

--6.next_day(日期,星期几):返回以指定日期为准,下一个最近的星期几的日期
select next_day(sysdate,'星期六') from dual;--2017-11-18 19:15:55

--7.可以用数字1-7代表星期日-星期六
select next_day(sysdate,7) from dual;--2017-11-18 19:15:55

--8.last_day(日期):返回指定日期的月最后一天的日期
select last_day(sysdate) from dual;--2017-11-30 19:19:27

--9.round(日期1,日期单位):对日期进行四舍五入。
select round(sysdate) from dual;--2017-11-14
select round(sysdate,'month') from dual;--2017-11-01
select round(sysdate,'year') from dual;--2018-01-01

--10.trunc(日期[,日期单位]):对日期进行截断。
select trunc(sysdate) from dual;--2017-11-13
select trunc(sysdate,'month') from dual;--2017-11-01
select trunc(sysdate,'year') from dual;--2017-01-01


/*
转换函数
*/

--1.to_char(日期\数字,‘模式’):把一个日期或者数字按照指定模式转换为字符串。
select '现在时间:' || sysdate from dual;--现在时间:13-11月-17
select '现在时间:' || to_char(sysdate,'yyyy-mm-dd') from dual;--现在时间:2017-11-13
select '现在时间:' || to_char(sysdate,'yyyy/mm/dd') from dual;--现在时间:2017/11/13
select '现在时间:' || to_char(sysdate,'mm/dd/yyyy') from dual;--现在时间:11/13/2017
select '现在时间:' || to_char(sysdate,'mm/dd/yyyy hh24:mi:ss') from dual;--现在时间:11/13/2017 19:41:16
select '现在时间:' || to_char(sysdate,'yyyy-mm-dd day') from dual;--现在时间:2017-11-13 星期一
select '现在时间:' || to_char(sysdate,'yyyy-mm-dd d') from dual;--现在时间:2017-11-13 2
select '现在时间:' || to_char(sysdate,'yyyy-month-ddspth day') from dual;--现在时间:2017-11月-thirteenth 星期一
select '现在时间:' || to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;--现在时间:2017年11月13日(双引号转义非法日期分隔符)
select '现在时间:' || to_char(sysdate,'fmyyyy-mm-dd') from dual;--现在时间:2017-11-13(fm去掉多余的前导0或者空格)

select '数字:' || to_char(&input,'fm9990.99') from dual;--最大4位整数,2位小数,个位数必须有一个数字
select '数字:' || to_char(&input,'fm9990.0099') from dual;--最大4位整数,2位小数,个位数必须有一个数字,小数必须有两位
select '数字:' || to_char(&input,'fmL9990.0099') from dual;--本地货币符号
select '数字:' || to_char(&input,'fmL9,990.0099') from dual;--千分位

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论