zoukankan      html  css  js  c++  java
  • oracle function

    函数

    • 单行函数:一个输入一个输出
    • 多行函数:多个输入一个输出
    • lower(a):a转小写
    • upper(a):a转大写
    • substr(a,b):在a中,取从b位开始到结尾的子串
    • initcap():首字母大写
    • length():字符长度
    • lengthb():字节长度
    • instr(a,b):在a中查找b,找到返回从1开始的下标,找不到返回0
    • lpad('abcd', 10, ''): 在abcd的左填充 ,一共10位,即****abcd,rpad()为右填充
    • trim():去掉前后指定的字符,select trim('H' from 'Hello WorldH') from dual; -- ello World
    • replace('Hello', '', 'l'):用替换‘Hello’中的‘l’
    • round(45.926, 2): 45.93,四舍五入
    • round(45.926, 0): 46
    • round(45.926, -1): 50
    • round(45.926, -2): 0
    • trunc(45.926, 2): 45.92, 舍去
    • mod(1600, 300): 100,取余

    日期

    • 系统时间:oracle: sysdate, mysql: now()函数
    • select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;
    • select ename, hiredate, (sysdate - hiredate) 天, (sysdate-hiredate)/7 星期, (sysdate-hiredate)/30 月 from daul; -- 计算员工工龄
    • 日期 +/- 一个数字 => +/- 天数,结果仍为日期
    • 两个日期相减返回两者之间相差的天数,日期之间相加无意义
    • 可用数字除以24,来向日期 +/- 小时数
    • months_between(sysdate, hiredate): 相差月数
    • add_months(): 向指定日期加上若干个月数
    • next_day(): 指定日期的下一个日期
    • last_day(sysdate): 本月的最后一天
    • round(sysdate, 'month'):
    • round(sysdate, 'year'):
    • trunc(sysdate, 'year')
    • select next_day(sysdate, '星期二') from dual; -- 下个星期二的日期

    显式类型转换

    		 to_number()  <<<                >>>  to_date()  
    number <=================>  character  <=================> date
    		   to_char()  >>>				 <<<  to_char()
    
    • select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss "今天是" day ') from dual;
    • select to_char(sal, 'L9,999.99') from dual; -- ¥4.800.00, L本地货币单位 ‘,’表千位分隔符, 9表一位数字, ‘.’表小数点

    通用函数

    • nvl(a, b): a为null,返回b,否则返回a
    • nvl2(a, b, c): a为null,返回c,否则返回b
    • select sal*12 + nvl2(comm,comm,0) from emp;
    • nullif(a,b): 当a=b,返回null,否则返回a
    • coalesce(expr1, ... ): 从左到右找到第一个不为null的值
    • select comm,sal, coalesce(comm, sal) from emp;

    涨工资

    	* select ename,job,sal 涨前,
    		case job when 'PRESIDENT' then sal + 1000
    				 when 'MANAGER' then sal + 800
    				 else sal + 400
    		end 涨后
    	  from emp;
    	* select ename, job, sal 涨前,
    		decode(job, 'PRESIDENT', sal + 1000, 
    					'MANAGER', sal + 800, 
    								sal + 400) 涨后
    	  from emp;
    

    多行函数/组函数

    • avg(),count(),max(),min(),sum()
    • 组函数自动滤空,可以嵌套滤空函数来屏蔽自动滤空
    • group by子句:在select列表中所有未包含在组函数中的列都应该出现在group by子句中
    • group by deptno, job: 先按第一列分组,第一列相同在按第二列分组
    • select deptno, count(ename) from emp; 错误的,count为组函数,deptno不在group by子句中,即缺少group by子句
    • 不能在where子句中使用组函数,可以在having子句中使用组函数,其他情况可通用,但where比having效率高
    • group by rollup(a,b) <=> group by a,b + group by a + group by null.
    • break on deptno skip 2 --相同部门号只打印一次,且不同之间跳过2行
    • break on null --取消以上格式
    • select deptno,job,sum(sal) from emp group rollup(deptno,job) -- 做报表
    • wm_concat(varchar2) -- 行转列组函数
    • select deptno,wm_concat(ename) namelist from emp group by deptno;
  • 相关阅读:
    组合容斥计数技巧
    [BZOJ3456]城市规划:DP+NTT+多项式求逆
    [BZOJ4456][ZJOI2016]旅行者:分治+最短路
    [51nod1383&1048]整数分解为2的幂:DP
    [BZO3572][HNOI2014]世界树:虚树+倍增
    树上最小权链覆盖:可并堆
    [BZOJ4237]稻草人:CDQ分治+单调栈
    [BZOJ3453]tyvj 1858 XLkxc:拉格朗日插值
    [BZOJ5463][APIO2018]铁人两项:Tarjan+圆方树
    [BZOJ4695]最假女选手:segment tree beats!
  • 原文地址:https://www.cnblogs.com/fuyiming/p/6491383.html
Copyright © 2011-2022 走看看