Oracle函数练习题

Oracle函数练习题

题目及参考答案:

-- 单行函数:只有一个参数输入,只有一个结果输出
-- 多行函数或分组函数:可有多个参数输入,只有一个结果输出    

-- 测试lower/upper/initcap函数,使用dual哑表
select lower('abc Def GHI') from dual;  --abc def ghi
select upper('abc Def GHI') from dual;  --ABC DEF GHI
select initcap('abc Def GHI') from dual;      --Abc Def Ghi

-- 测试concat/substr函数,从1开始,表示字符,不论中英文
select concat('abc','一二三') from dual;         --abc一二三
select 'abc' || '一二三' || '哈吼' from dual;      --abc一二三哈吼
select concat('abc',concat('一二三','哈吼')) from dual;  --abc一二三哈吼
select substr('abc一二三',3,3) from dual;  --c一二

-- 测试length函数,一个英文一个字节
select length('abc一二三') from dual;      --6

-- 测试instr/lpad/rpad函数,从左向右找第一次出现的位置,从1开始
select instr('abcdefg','e') from dual;  --5
select LPAD('abc',6,'*') from dual;     --***abc
select RPAD('abc',6,'*') from dual;     --abc***

-- 测试trim/replace函数
select trim(' ' from '  abc  a  ') from dual;       --abc  a
select replace('aaBBccAADDee','c','A') from dual;   --aaBBAAAADDee

-- 测试round/trunc/mod函数作用于数值型
select round(1.12345,3) from dual;     --1.123
select trunc(1.12345,3) from dual;     --1.123
select mod(10,3) from dual;  --1

-- 当前日期:sysdate
select to_char(sysdate, 'yyyy-mm-dd') from dual;    --2019-03-12

-- 测试round作用于日期型(month)
select round(sysdate, 'month') from dual;  --2019/3/1

-- 测试round作用于日期型(year)
select round(sysdate, 'year') from dual;   --2019/1/1

-- 测试trunc作用于日期型(month)
select trunc(sysdate, 'month') from dual;  --2019/3/1

-- 测试trunc作用于日期型(year)
select trunc(sysdate, 'year') from dual;   --2019/1/1

-- 显示昨天,今天,明天的日期,日期类型 +- 数值 = 日期类型
select sysdate-1 "昨天", sysdate "今天", sysdate+1 "明天" from dual;  --2019/3/11 10:55:53 | 2019/3/12 10:55:53 | 2019/3/13 10:55:53

-- 以年和月形式显示员工近似工龄,日期-日期=数值,假设:一年以365天计算,一月以30天计算
select ename "姓名", round(sysdate-hiredate,0)/365 "天数" from emp; --SMITH | 38.2575342465753 ......

-- 使用months_between函数,精确计算到年底还有多少个月
select months_between('31-12月-19', sysdate) from dual; --9.59805630227001

-- 使用months_between函数,以精确月形式显示员工工龄
select ename "姓名", months_between(sysdate, hiredate) "员工工龄" from emp;   --SMITH | 458.853571535245 ......

-- 测试add_months函数,下个月今天是多少号
select add_months(sysdate,1) from dual;    --2019/4/12 11:04:33

-- 测试add_months函数,上个月今天是多少号
select add_months(sysdate,-1) from dual;   --2019/2/12 11:05:32

-- 测试next_day函数,从今天开始算,下一个星期三是多少号
select next_day(sysdate, '星期三') from dual; --2019/3/13 11:06:25

-- 测试next_day函数,从今天开始算,下下一个星期三是多少号
select next_day(next_day(sysdate, '星期三'), '星期三') from dual; --2019/3/20 11:08:35

-- 测试next_day函数,从今天开始算,下一个星期三的下一个星期日是多少号
select next_day(next_day(sysdate, '星期三'), '星期日') from dual; --2019/3/17 11:09:12

-- 测试last_day函数,本月最后一天是多少号
select last_day(sysdate) from dual;       --2019/3/31 11:11:09

-- 测试last_day函数,本月倒数第二天是多少号
select last_day(sysdate)-1 from dual;     --2019/3/30 11:11:21

-- 测试last_day函数,下一个月最后一天是多少号
select last_day(add_months(sysdate,1)) from dual;     --2019/4/30 11:11:31

-- 测试last_day函数,上一个月最后一天是多少号
select last_day(add_months(sysdate,-1)) from dual;    --2019/2/28 11:12:01

-- 注意:
-- 1)日期-日期=天数
-- 2)日期+-天数=日期


---------三大类型转换

-- oracle中三大类型与隐式数据类型转换
-- (1)varchar2变长/char定长-->number,例如:'123'->123
-- (2)varchar2/char-->date,例如:'25-4月-15'->'25-4月-15'
-- (3)number---->varchar2/char,例如:123->'123'
-- (4)date------>varchar2/char,例如:'25-4月-15'->'25-4月-15'

-- oracle如何隐式转换:
-- 1)=号二边的类型是否相同
-- 2)如果=号二边的类型不同,尝试的去做转换
-- 3)在转换时,要确保合法合理,否则转换会失败,例如:12月不会有32天,一年中不会有13月
 
-- 查询1980年12月17日入职的员工(方式一:日期隐示式转换)
select * from emp where hiredate = '17-12月-80';       --7369 | SMITH | CLERK | 7902 | 1980/12/17 | 800.00 |  | 20

-- 使用to_char(日期,'格"常量"式')函数将日期转成字符串,显示如下格式:2015 年 04 月 25 日 星期六
select to_char(sysdate,'yyyy" 年 "mm"月 "dd"日 "day') from dual;  --2019 年 03月 12日 星期二

-- 使用to_char(日期,'格式')函数将日期转成字符串,显示如格式:2015-04-25今天是星期六 15:15:15
select to_char(sysdate,'yyyy-mm-dd"今天是"day hh24:mi:ss') from dual;    --2019-03-12今天是星期二 11:13:50

-- 使用to_char(数值,'格式')函数将数值转成字符串,显示如下格式:$1,234
select to_char(1234,'$9,999') from dual;   -- $1,234

-- 使用to_char(数值,'格式')函数将数值转成字符串,显示如下格式:¥1,234select to_char(1234,'$9,999') from dual;
select to_char(1234,'L9,999') from dual;            --¥1,234

你可能感兴趣的:(数据库)