oracle--单行函数
来源:互联网 发布:sql导出身份证号码 编辑:程序博客网 时间:2024/06/05 06:09
单行函数
SQL函数:
两种sql函数
单行函数
- 操作数据对象
- 接受参数返回一个结果
- 只对一行进行变换
- 每行返回一个结果
- 可以转换数据类型
- 可以嵌套
- 参数可以是一列或一个值
一、字符函数
大小写控制函数:改变字符的大小写
--字符函数select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world') 首字母大写 from dual;--substr(a,b) 从a中,第b位开始取select substr('Hello World',3) 子串 from dual;子串 --------- llo World --substr(a,b,c) 从a中,第b位开始取,取c位select substr('Hello World',3,4) 子串 from dual;子串 ---- llo--instr(a,b) 在a字符串中查找b,找到了,返回下标(从1开始),没有找到,返回0select instr('Hello World','ll') 位置 from dual; 位置 ---------- 3 --length 字符数 lengthb 字节数英文:select length('Hello World') 字符,lengthb('Hello World') 字节 from dual; 字符 字节 ---------- ---------- 11 11 中文:select length('北京') 字符,lengthb('北京') 字节 from dual 字符 字节 ---------- ---------- 2 4 --lpad 左填充 rpad 右填充-- abcd ---> 10 位select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;第一个参数:对谁进行填充第二个参数:填到多少位第三个参数:填什么左 右 ---------- ---------- ******abcd abcd****** --trim 去掉前后指定的字符select trim('H' from 'Hello WorldH') from dual;TRIM('H'FR ---------- ello World --replaceselect replace('Hello World','l','*') from dual;REPLACE('HE ----------- He**o Wor*d
二、数字函数:
round:四舍五入(第二个参数表示保留两位小数)round(45.926,2)--->45.93trunc:截断trunc(45.926,2)--->45.92mod:求余mod(1600,300)--->100select 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--截断select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三, 2 trunc(45.926,-1) 四,trunc(45.926,-2) 五 3* from dualSQL> / 一 二 三 四 五 ---------- ---------- ---------- ---------- ---------- 45.92 45.9 45 40 0
三、日期:
Oracle中的日期型数据(date)实际含有两个值:日期和时间
默认的日期格式是:DD-MON-RR
--查询当前时间SQL> select sysdate from dual;SYSDATE---------04-MAY-17to_char():把某个东西,按照某个格式转换成字符串 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,'YY-------------------2017-05-04 09:19:58
日期的数学运算:
- 在日期上加上或减去一个数字结果仍为日期
- 两个日期相减返回日期之间相差的天数
- 可以用数字除24来向日期中加上或减去小时
例如:
--昨天 今天 明天SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;昨天 今天 明天 -------------- -------------- -------------- 21-11月-15 22-11月-15 23-11月-15 --计算员工的工龄:天 星期 月 年SQL> select ename,hiredate, (sysdate-hiredate) 天,(sysdate-hiredate)/7 星期, 2 (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年 3 from emp;ENAME HIREDATE 天 星期 月 年 ---------- -------------- ---------- ---------- ---------- ---------- SMITH 17-12月-80 12758.6314 1822.66163 425.287713 34.9551545 ALLEN 20-2月 -81 12693.6314 1813.37591 423.121046 34.7770723 WARD 22-2月 -81 12691.6314 1813.0902 423.05438 34.7715928 JONES 02-4月 -81 12652.6314 1807.51877 421.75438 34.6647435 MARTIN 28-9月 -81 12473.6314 1781.94734 415.787713 34.1743326 BLAKE 01-5月 -81 12623.6314 1803.37591 420.787713 34.5852915 CLARK 09-6月 -81 12584.6314 1797.80448 419.487713 34.4784422 SCOTT 19-4月 -87 10444.6314 1492.0902 348.15438 28.6154285 KING 17-11月-81 12423.6314 1774.80448 414.121046 34.0373463 TURNER 08-9月 -81 12493.6314 1784.80448 416.45438 34.2291271 ADAMS 23-5月 -87 10410.6314 1487.23306 347.021046 28.5222778 ENAME HIREDATE 天 星期 月 年 ---------- -------------- ---------- ---------- ---------- ---------- JAMES 03-12月-81 12407.6314 1772.51877 413.587713 33.9935107 FORD 03-12月-81 12407.6314 1772.51877 413.587713 33.9935107 MILLER 23-1月 -82 12356.6314 1765.23306 411.887713 33.8537846
日期函数:
moths_between:select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) 二 from emp;ENAME HIREDATE 一 二 ---------- -------------- ---------- ---------- SMITH 17-12月-80 425.287784 419.181726 ALLEN 20-2月 -81 423.121117 417.084952 WARD 22-2月 -81 423.054451 417 JONES 02-4月 -81 421.754451 415.665597 MARTIN 28-9月 -81 415.787784 409.826888 BLAKE 01-5月 -81 420.787784 414.697855 CLARK 09-6月 -81 419.487784 413.439791 SCOTT 19-4月 -87 348.154451 343.11721 KING 17-11月-81 414.121117 408.181726 TURNER 08-9月 -81 416.454451 410.472049 ADAMS 23-5月 -87 347.021117 341.988178 ENAME HIREDATE 一 二 ---------- -------------- ---------- ---------- JAMES 03-12月-81 413.587784 407.633339 FORD 03-12月-81 413.587784 407.633339 MILLER 23-1月 -82 411.887784 405.988178--56 个月后SQL> select add_months(sysdate,56) from dual;ADD_MONTHS(SYS -------------- 22-7月 -20 select last_day(sysdate) from dual;LAST_DAY(SYSDA -------------- 30-11月-15 --next_daySQL> --下一个星期日SQL> select next_day(sysdate,'星期日') from dual;NEXT_DAY(SYSDA -------------- 29-11月-15 SQL> --下一个星期一SQL> select next_day(sysdate,'星期一') from dual;NEXT_DAY(SYSDA -------------- 23-11月-15
next_day的应用:
每个星期一自动备份数据 1. 分布式数据库 2. 快照 触发器
日期函数:
select round(sysdate,'month'),round(sysdate,'year') from dual;ROUND(SYSDATE, ROUND(SYSDATE, -------------- -------------- 01-12月-15 01-1月 -16
转换函数:
数据类型转换:隐式显示
隐式数据类型转换:(oracle自动完成)
select * from emp where hiredate='17-11月-81'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- --------- ---------- -------------- ----- ---------- ---------- 7839 KING PRESIDENT 17-11月-81 5000 10
显示数据类型转换:
to_char函数对日期的转换:
to_char(date,'format_model')格式:必须包含在单引号中而且大小写敏感可以包含任意的有效的日期格式日期之间用逗号隔开
日期格式的元素:
--2015-11-22 15:32:12今天是星期日select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI ---------------------------------- 2015-11-22 15:33:55今天是星期日
to_char函数对数字的转换:
to_char函数中经常使用的几种格式
--查询员工薪水:两位小数 千位符 货币代码select to_char(sal,'L9,999.99') from emp;TO_CHAR(SAL,'L9,999 ------------------- ¥800.00 ¥1,600.00 ¥1,250.00 ¥2,975.00 ¥1,250.00 ¥2,850.00 ¥2,450.00 ¥3,000.00 ¥5,000.00 ¥1,500.00 ¥1,100.00 TO_CHAR(SAL,'L9,999 ------------------- ¥950.00 ¥3,000.00 ¥1,300.00
通用函数:
这些函数适用于任何数据类型,同时也适用于空值
nvl(expr1,expr2)nvl(expr1,expr2,expr3)nullif(expr1,expr2)coalesce(expr1,expr2,...,exprn)--nvl2(a,b,c) 当a=null的时候,返回c;否则返回bselect sal*12+nvl2(comm,comm,0) from emp;--nullif(a,b) 当a=b的时候,返回null;否则返回aselect nullif('abc','abc') 值 from dual;值 --- select nullif('abc','abcd') 值 from dual;值 --- abc
–coalesce 从左到右找到第一个不为null的值
select comm,sal,coalesce(comm,sal) “第一个不为null的值” from emp;
COMM SAL 第一个不为null的值
800 800 300 1600 300 500 1250 500 2975 2975 1400 1250 1400 2850 2850 2450 2450 3000 3000 5000 5000 0 1500 0 1100 1100 COMM SAL 第一个不为null的值
950 950 3000 3000 1300 1300
条件表达式:
在sql语句中使用if-then-else逻辑使用两种方法:1、case表达式:sql99的语法,类似basic,比较繁琐2、decode函数:Oracle自己的语法,类似java,比较简洁
语法:
case:
case expr when comparison_expr1 then return_expr1 [when comparison_expr2 then return_expr2 when comparison_exprn then return_exprn else else_expr]endSQL> 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;或者:case when sal<3000 then **** when sal>=3000 and sal<6000 then **** else ****end
decode:
decode(col|expression,search1,result1 [,search2,result2,...,] [,default])SQL> select ename,job,sal 涨前, 2 decode(job,'PRESIDENT',sal+1000, 3 'MANAGER',sal+800, 4 sal+400) 涨后 5 from emp;
0 0
- oracle单行函数
- oracle单行函数
- Oracle单行函数笔记
- oracle单行函数详解
- Oracle(三)-------------------单行函数
- oracle单行函数详解
- oracle单行函数详解
- Oracle单行函数
- oracle单行函数详解
- oracle单行函数
- oracle单行函数
- oracle 单行函数详解
- oracle 单行函数介绍
- Oracle单行函数
- Oracle之单行函数
- Oracle学习----单行函数
- Oracle单行函数
- oracle常用单行函数
- 【java】java swing:五子棋人机对弈
- 网狐李逵劈鱼进入时闪退
- apache nifi client with es6
- linux zless命令汇总
- 音频三--音频会话
- oracle--单行函数
- jquery validate入门
- java xls导出小样例
- UTF-8编码表
- Linux的目录结构与文件权限
- [leetcode]: 217. Contains Duplicate
- 工作中问题记录--servlet中使用@Autowired注解
- 报错 AttributeError: 'module' object has no attribute 'bool_'
- mac automator使用