单行函数

字符函数

  • lower 转换小写
  • upper 转换大写
  • initcap 转换首字母大写
SELECT 'helloworld Java',
LOWER('helloworld Java') ,
UPPER('helloWorld Java') ,
INITCAP('helloWorld Java') 
FROM dual                                                                                                                  
  • concat 字符连接
SELECT CONCAT('Hello', ' World!') FROM  dual
  • substr 查询子串
SELECT SUBSTR('abcdefgh',2,4) FROM dual
  • length 查询字符长度
  • instr 获取某个字符在字符串中的位置
SELECT LENGTH('HelloWorld!'),INSTR('HelloWorld!','W') FROM dual
  • lpad 向左补齐字符
  • rpad 向右补齐字符
SELECT salary,LPAD(salary,10,'*'),RPAD(salary,10,'*') FROM emp
  • trim去除前后字符函数
SELECT TRIM('H' FROM 'HelloHWorldHH') FROM dual
  • trim去除空格
SELECT TRIM('  HelloHWorldHH   ') FROM dual
  • replace字符串替换函数
SELECT REPLACE('abcdabcdabcd','a','m') FROM dual

数值函数

  • round 四舍五入到指定位
SELECT ROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1) FROM dual
  • trunc 对指定位截断
SELECT TRUNC(45.923,2),TRUNC(45.923,0),TRUNC(45.923,-1) FROM dual

-mod 求余(模)

SELECT sal, MOD(sal,1000) AS Mod_Sal FROM emp

日期函数

image.png

转换函数

  • to_date 字符转换日期
  • to_number 字符转换数字
  • to_char 对日期进行转换
select TO_CAHR(SYSDATE,'yyyy-MM-dd hh:mm:dd day') from dual
  • 金额格式,如果是用9,不足的位数不会填充;但是使用0,就会在不足的位上补零
SELECT TO_CHAR(sal, '$999,999.00') SALARY
FROM   emp
WHERE  ename = 'King';

SELECT TO_CHAR(sal, '$000,000.00') SALARY
FROM   emp
WHERE  ename = 'King'

通用函数

  • nvl 将空值转换成一个已知的值
  • nvl2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。
SELECT ename,sal,NVL2(comm, comm, 0) comm
FROM  emp
WHERE deptno IN (20, 30)
  • nullif (expr1, expr2) :相等返回NULL,不等返回expr1
select nullif(50,50) from dual
  • coalesce :与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值
select coalesce(null,comm,sal) from emp

条件表达式

  • case
select ename, deptno,
(case deptno
when 10 then '销售部'
when 20 then '技术部'
when 30 then '管理部'
else '无' end) deptname
from emp
  • decode
select ename, deptno,
decode(deptno,
10, '销售部',
20, '技术部',
30, '管理部',
'无' ) deptname
from emp

练习1.1 写一个查询,用首字母大写,其他字母小写显示雇员的ename,显示名字的长度,并给每一列适当的标签,条件是满足所有雇员名字的开始字母是J、A或M的雇员,并对查询结果按雇员的ename升序排序。(用initcap、length、substr)

select initcap(ename) ename, length(ename) length from emp
where substr(ename,1,1) in ('J','A','M')
order by ename 

2.1 查询员工姓名中中包含大写或小写字母A的员工姓名。

select ename from emp where instr(upper(ename),'A')>0

2.2 查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度(提示,要求使用INSTR函数,不能使用like进行判断)。

select ename, length(ename) from emp 
where deptno in (10,20) and hiredate>'1981-05-01' and instr(ename,'A')>0

2.3 查询每个职工的编号,姓名,工资要求将查询到的数据按照 要求将查询到的数据按照定的格式合并成一个字符串.
–前10位:编号,不足部分用填充,左对齐
–中间10位:姓名,不足部分用
填充,左对齐
–后10位:工资,不足部分用*填充,右对齐

select rpad(empno,10,'*')||rpad(ename,10,'*')||lpad(sal,10,'*') emp from emp 

3.1 写一个查询,分别计算100.456四舍五入到小数点后2位,1位,整数位的值。

select round(100.456,2), round(100.456, 1), round(100.456,0) from dual

3.2 写一个查询,分别计算100.456从小数点后2位,1位,整数位截断的值。

select trunc(100.456,2), trunc(100.456,1), trunc(100.456,0) from dual

4.1 查询每个员工截止到现在一共入职多少天?

select round(sysdate-hiredate,0) days from emp

5.1 查询服务器当前时间

select sysdate from dual

5.2 查询部门10 20 的员工截止到2000年1月1日,工作了多少个月,入职的月份。(提示:使用months_between,extract)

select round(months_between('2000-01-01', hiredate),0) work_months, extract(month from hiredate) hire_month
from emp 
where deptno in (10,20)

5.3 如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,入职日期后的第一个星期一,入职当月的最后一天日期。(提示:使用add_months,next_day,last_day)

select ename, hiredate, add_months(hiredate, 6), next_day(hiredate, 'Monday'), last_day(hiredate)
from emp 
where job<>'MANAGER'

6.4 把字符串2015-3月-18 13:13:13 转换成日期格式转换成日期格式,并计算
和系统当前时间间隔多少天。 (提示:使用to_date函数)

select  round(sysdate-to_date('2015-March-18 13:13:13','YYYY-MM-DD HH24:MI:SS')) from dual

课后作业1. 计算2000年1月1日到现在有多少月,多少周(四舍五入)。

select round(months_between(sysdate,'2000-01-01')) months,
round((sysdate-date'2000-01-01')/7) weeks
from dual
  1. 查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
select * from emp where substr(ename,3,1)='A'
select * from emp where instr(ename,'A',3,1)=3
  1. 使用trim函数将字符串‘hello’、‘ Hello ’、‘bllb’、‘hello’分别处理得到下列字符串ello、Hello、ll、hello。
select trim('h'from'hello') from dual;
select initcap('hello') from dual;
select trim('b'from'bllb') from dual;
select lower('hello') from dual
  1. 将员工工资按如下格式显示:123,234.00 RMB 。
select to_char('12323400', '999,999,99')||'RMB' sal from dual
  1. 查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
select ename, nvl(to_char(mgr),'No Manager') from emp
  1. 将员工的参加工作日期按如下格式显示:月份/年份。
select to_char(hiredate, 'MON/YY') from emp
  1. 在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,
    税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。
select ename, sal, (case 
when sal<1000 then 0
when sal>=1000 and sal<2000 then sal*0.1
when sal>=2000 and sal<3000 then sal*0.15
when sal>=3000 then sal*0.2
end) tax
from emp
  1. 创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15 个字符长度,用 $ 左填充,列标签 SALARY。
select ename, lpad(sal,15,'$') salary from emp
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 定义:只对一行进行变换,并产生结果 6种 一、字符函数 第一类:lower 、upper、 initcap--大小...
    52Hz的蓝鲸阅读 231评论 0 0
  • 1,字符串函数。 转大小写操作: select upper('hello') from dual; select ...
    大小说家RCQ阅读 293评论 0 0
  • SQL函数 SQL函数分类 SQL函数主要有两种,分为单行函数、多行函数单行函数:只对一行进行变换,每行返回一个结...
    MPPC阅读 676评论 0 7
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,699评论 0 2
  • 一直在写产品运营主题的文章,因为这是我的工作。读书与写作也是我每个月的生活重点,今天和大家分享一下我最常用的9个有...
    白崎阅读 27,456评论 15 371