SQL 单行函数 练习

–1:验证UPPER()、LOWER()函数
select upper(‘HXY’),lower(‘hxy’) from dual;

–2:现在查询出雇员姓名是“smith”的完整信息,但是由于失误,没有考虑到数据的大小写问题(在一些项目的运行之中经常会出现此类输入数据不考虑大小写的问题),此时可以使用UPPER()函数将全部内容变为大写
select * from emp where ename=upper(‘SMITH’);

–3:查询所有雇员的姓名,要求将每个雇员的姓名以首字母大写的形式出现
select ename,initcap(ename)from emp;

–4:现在要求查询所有雇员的姓名,但是要求将雇员姓名中所有的字母“A”替换成字母“_”
select ename,replace(ename,‘A’,’_’) from emp;

–5:查询出姓名长度是5的所有雇员信息
select * from emp where length(ename)=5;

–6:现在要求查询出雇员姓名前三个字母是“JAM”的雇员信息
select * from emp where substr(ename,0,3)=‘JAM’

–7:查询所有10部门雇员的姓名,但是不显示每个雇员姓名的前三个字母
select ename,substr(ename,3) from emp where deptno=10;

–8:要求显示每个雇员姓名及其姓名的后三个字母
select ename,substr(ename,length(ename)-2) from emp;

–9:在SUBSTR()函数中设置负数截取
select ename,substr(ename,-3) from emp;

–10: 下标从0开始
select ename,substr(ename,0,3) from emp ;

–11:下标从1开始
select ename,substr(ename,1,3) from emp ;

–12:返回指定字符的ASCII码
select ascii(‘L’),ascii(‘l’) from dual;

–13:验证CHR()函数,将ASC II码变回字符
select chr(100) from dual;

–14:去掉字符串左边空格 —— LTRIM()
select ’ CUIXU VDATA ‘,ltrim(’ CUIXU VDATA ') from dual;

–15:去掉字符串右边空格 —— RTRIM()
select ’ CUIXU VDATA ‘,rtrim(’ CUIXU VDATA ') from dual;

–16:去掉左右两边空格 —— TRIM()
select ’ CUIXU VDATA ‘,trim(’ CUIXU VDATA ') from dual;

–17:字符串左、右填充 —— LPAD()、RPAD()
select lpad(‘VDATA’,10,’’),rpad(‘VDATA’,10,’’) from dual;

–18:字符串查找 —— INSTR()
select
instr (‘VDATA Oracle’,‘VDATA’),
instr (‘VDATA Oracle’,‘Oracle’),
instr (‘VDATA Oracle’,‘ORACLE’)
from
dual;

–19:验证ROUND()函数的使用
select
round(789.652),
round(789.652,2),
round(789.652,-1)
form
dual;

–20:列出每个雇员的一些基本信息和日工资情况
select
empno,
ename,
job,
hiredate,
sal,
round(sal/30,2)
from
emp;

–21:验证TRUNC()函数

–22:验证MOD函数
select
mod(10,3)
from
dual;

–23:取得当前的系统时间
select
sysdate
from
dual;

–24:修改日期显示格式
alter session set nls_date_format = ‘yyyy-mm-dd hh24:mi:ss’;
select
sysdate
from
dual;

–24:查询距离今天为止3天之后以及3天之前的日期
select
sysdate+3,
sysdate-3,
from
dual;

–25:查询出每个雇员的到今天为止的雇佣天数、以及十天前每个雇员的雇佣天数。
select
empno,
ename,
sysdate-hiredate,
(sysdate-10)-hiredate
from
emp;

–26:在查询结果之中使用TRUNC()函数完成功能
select
empno,
ename,
trunc(sysdate-hiredate),
trunc((sysdate- 10)-hiredate)
from
emp;

–27:验证ADD_MONTHS()函数

–28:要求显示所有雇员在被雇佣三个月之后的日期
select
empno,
ename,
job,
sal,
hiredate,
add_months(hiredate,3)
from
emp;

–29:验证NEXT_DAY()函数,NEXT_DAY()函数的功能主要是求出下一个指定的日期数,如果说现在的日期是“2012年01月30日 星期一”,那么如果现在要想知道下一个“星期一”或是“星期日”的具体日期,则可以使用

NEXT_DAY()函数。
select
sysdate,
next_day(SYSDATE,‘星期日’),
next_day(SYSDATE,‘星期一’)
from
dual;

LAST_DAY()函数
–30:验证LAST_DAY()函数,使用LAST_DAY()函数可以求得指定日期所在月的最后一天日期,如果今天的日期是“2012年01月19日”,则使用LAST_DAY()求出来的日期就是“2012年01月31日”

select
sysdate
last_day(sysdate)
from
dual;

–31:查询所有是在其雇佣所在月的倒数第三天被公司雇佣的完整雇员信息
select
empno,
ename,
job,
hiredate,
last_day(hiredate)
from
emp
where
last_day(hiredate) - 2 = hiredate;

–32:查询出每个雇员的编号、姓名、雇佣日期、雇佣的月数及年份

–33:查询出每个雇员的编号、姓名、雇佣日期、已雇佣的年数、月数、天数

–34:从日期时间之中取出年、月、日数据。
select
extract(year from date ‘2001-09-19’) years,
extract(month from date ‘2001-09-19’) months,
extract(day from date ‘2001-09-19’) days
from
dual;

–35:从时间戳之中取出年、月、日、时、分、秒。
select
extract(year from systimestamp) years,
extract(month from systimestamp) months,
extract(day from systimestamp) days,
extract(hour from systimestamp) hours,
extract(minute from systimestamp) minutes,
extract(second from systimestamp) seconds
from
dual;

–36:取得时间间隔

–37:复杂计算时间间隔(天数)
select
extract (day from to_timestamp(‘1982-08-13 12:17:57’,‘yyyy-mm-dd hh24:mi:ss’) - to_timestamp(‘1981-09-27 09:08:33’,‘yyyy-mm-dd hh24:mi:ss’
)) days
from
dual;

–34:格式化当前的日期时间
select
sysdate,
to-char(sysdate,‘yyyy-mm-dd hh24:mi:ss’)
from
dual;

–35:使用其他方法格式化年、月、日
select
sysdate,
to_char(sysdate,‘year-month-day’)
from
dual;

–36:查询出所有在每年2月份雇佣的雇员信息
select
*
from
emp
where
to_char(hiredate,‘mm’) = ‘02’;

–37:直接判断数字2
select
*
from
emp
where
to_char(hiredate,‘mm’) = 2;

–38:现在要求将每个雇员的雇佣日期进行格式化显示,要求所有的雇佣日期可以按照“年-月-日”的形式显示,也可以将雇佣的年、月、日拆开分别显示
select
empno,
ename,
job,
hiredate,
to_char(hiredate,‘yyyy-mm-dd’),
to_char(hiredate,‘yyyy’) 年,
to_char(hiredate,‘mm’) 月,
to_char(hiredate,‘dd’) 日
from
emp;

–39:使用英文的日期格式表示出每个雇员的雇佣日期
select
empno,
ename,
hiredate,
to_char(hiredate,‘year-month-day’)
from
emp;

–40:格式化数字显示
sclect
to_char(987654321.789,‘999,999,999,999.99999’)
from
dual;

–41:格式化货币显示
select
to_char(987654321.789,‘L999,999,999,999.99999’)
from
dual;

-***-42:使用TO_DATE()函数***
select
to_char(‘1979-09-19’,‘yyyy-mm-dd’)
from
dual;

–43:使用TO_TIMESTAMP()函数
select
to_timestamp(‘1981-09-27 18:07:10’,‘yyyy-mm-dd hh24:mm:ss’) datetime
from
dual;

–43:使用TO_NUMBER()函数将字符串变为数字
select
to_number(‘09’)
from
dual;

–44:不利用TO_NUMBER()函数字符串也可以自动变为数字
select
‘09’
from
dual;

–45:要求查询出每个雇员的编号、姓名、职位、雇佣日期、年薪
select
empno,
ename,
job,
hiredate,
(sal+comm)*12
from
emp;

–46:验证NVL()函数
select
nvl(null,0),
nvl(3,0)
from
dual;

–47:使用NVL()函数解决年薪为null的情况。
select
empno,
ename,
job,
hiredate,
(sal+nvl(comm,0))*12
from
emp;

–48:查询每个雇员的编号、姓名、年薪(sal + comm)、基本工资、奖金
select
empno,
ename,
nvl2(comm,sal + comm,sal),
sal,
comm
from
emp;

–49:验证NULLIF()函数
select
nullif(1,1),
nullif(1,2)
from
dual;

–50:验证NULLIF()函数
select
empno,
ename,
job,
length(ename),
length(job),
nullif(length(ename),length(job) ) nullif
from
emp;

–51:测试DECODE()函数
select
decode(2,1,‘内容为一’,2,‘内容为二’),
decode(2,1,‘内容为一’,‘没有条件满足’)
from
dual;

–52:现在雇员表中的工作有以下几种:
· CLERK:业务员
· SALESMAN:销售人员
· MANAGER:经理
· ANALYST:分析员
· PRESIDENT:总裁
要求可以查询雇员的姓名、职位、基本工资等信息,但是要求将所有的职位信息都替换为中文显示。
select
ename,
sal,
decode(job,‘CLERK’,‘业务员’,‘SALESMAN’,‘销售人员’,‘MANAGER’,‘经理’,‘ANALYST’,‘分析员’,‘PRESIDENT’,‘总裁’) job
from
emp;

–53:在DECODE()函数中只判断部分内容
select
ename,
sal,
decode(job,‘CLERK’,‘业务员’,‘SALESMAN’,‘销售人员’,‘MANAGER’,‘经理’) job
from
emp;

–54:显示每个雇员的姓名、工资、职位,同时显示新的工资(新工资的标准为:办事员增长10%、销售人员增长20%、经理增长30%、其他职位的人增长50%)
select
ename,
sal,
case job
when ‘CLERK’ then sal * 1.1
when ‘SALESMAN’ then sal * 1.2
when ‘MANAGER’ then sal * 1.3
else sal * 1.5
end 新工资
from
emp;

–55:验证COALESCE()函数的功能
select
ename,
sal,
comm,
coalesce(comm,null,2000)
from
emp;

SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值