Oracle单行函数

单行函数

SQL> --字符函数

SQL> --select lower('Hello World') 小写,upper('Hello World') 大写,initcap('hello world') 首字母大写

2 from dual;

 

SQL> --substr(a,b) 从a中,第b位开始取 substr(a,b,c) 直到第c位 b从1开始 b,c超出范围不报错

SQL> select substr('hello',3) from dual;

SUB

---

llo

SQL> select substr('hello',3,9) from dual;

SUB

---

llo

 

SQL> --instr(‘ ‘,’ ‘) 计数从一开始

SQL> select instr('hello','lo') from dual;

INSTR('HELLO','LO')

-------------------

4

 

SQL> --length 字符数 lengthb 字节数

SQL> select length('Hello World') 字符,lengthb('Hello World') 字节

2 from dual;

字符 字节

---------- ----------

11 11

SQL> select length('北京') 字符,lengthb('北京') 字节

2* from dual

字符 字节

---------- ----------

2 4

 

SQL> --lpad 左填充 rpad右填充

SQL> -- abcd ---> 10位

SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右

2 from dual;

左 右

---------- ----------

******abcd abcd******

 

SQL> select trim('H' from 'HelHloH') from dual;

TRIM

-----

elHlo

 

SQL>select replace('Hello World','l','*') from dual;

 

 

SQL> --四舍五入 round(a)=round(a,0)

SQL> select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,

2 round(45.926,-1) 四,round(45.926,-2) 五

3 from dual;

一 二 三 四 五

---------- ---------- ---------- ---------- ----------

45.93 45.9 46 50 0

 

SQL> --截断

SQL> ed

已写入 file afiedt.buf

1 select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,

2 trunc(45.926,-1) 四,trunc(45.926,-2) 五

3* from dual

SQL> /

一 二 三 四 五

---------- ---------- ---------- ---------- ----------

45.92 45.9 45 40 0

 

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2018-08-26 18:02:55

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI

----------------------------------

2018-08-26 18:17:44今天是星期日

 

SQL> --昨天 今天 明天

SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;

昨天 今天 明天

-------------- -------------- --------------

09-3月 -15 10-3月 -15 11-3月 -15

SQL> --months_between

SQL> select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) 二

2 from emp;

ENAME HIREDATE 一 二

---------- -------------- ---------- ----------

SMITH 17-12月-80 416.720919 410.794437

ALLEN 20-2月 -81 414.554252 408.697663

WARD 22-2月 -81 414.487585 408.633147

 

SQL> --78个月后-

SQL> --add_months

SQL> select add_months(sysdate,78) from dual;

ADD_MONTHS(SYS

--------------

10-9月 -21

 

SQL> --last_day 月的最后一天

SQL> select last_day(sysdate) from dual;

SQL> --下一个星期二 格式需遵循 ’周二‘ ’礼拜二‘都错误

SQL> select next_day(sysdate,'星期二') from dual;

next_day的应用:每个星期一自动备份数据

1. 分布式数据库

2. 快照

 

SQL> --对日期四舍五入

SQL> select round(sysdate,'month'),round(sysdate,'year') from dual;

ROUND(SYSD ROUND(SYSD

---------- ----------

2018-09-01 2019-01-01

 

通用函数

SQL> -- 通用函数

SQL> --nvl(a,b) 当a=null时候,返回b,否则返回a自身

SQL>select nvl(comm,0) 奖金 from emp;

SQL> --nvl2(a,b,c) 当a=null时候,返回c,否则返回b

SQL> select sal*12+nvl2(comm,comm,0) from emp;

 

SQL> --nullif(a,b) 当a=b时候,返回null,否则返回a

SQL> select nullif('abc','abc') 值 from dual;

---

SQL> select nullif('abc','abcd') 值 from dual;

---

abc

 

SQL> --coalesce 从左到右找到第一个不为null的值

SQL> select comm,sal,coalesce(comm,sal) "第一个不为null的值"

2 from emp;

COMM SAL 第一个不为null的值

---------- ---------- ------------------

800 800

300 1600 300

500 1250 500

2975 2975

1400 1250 1400

2850 2850

 

SQL> select ename,job,sal 涨前,

2 case job when 'PRESIDENT' then sal+1000

3 when 'MANAGER' then sal+800

4 else sal+400

5 end 涨后

6 from emp;

ENAME JOB 涨前 涨后

---------- --------- ---------- ----------

SMITH CLERK 800 1200

ALLEN SALESMAN 1600 2000

WARD SALESMAN 1250 1650

JONES MANAGER 2975 3775

 

SQL> select ename,job,sal 涨前,

2 decode(job,'PRESIDENT',sal+1000,

3 'MANAGER',sal+800,

4 sal+400) 涨后

5 from emp;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值