oracle函数总结:有精确小数位的函数,字符串截取函数,大小写转换函数,字符串截取匹配函数,日期函数,系统

SELECT MOD(25,5) FROM DUAL;  
SELECT ROUND(40.66),ROUND(40.66,1),ROUND(40.66,-1) ,ROUND(140.66,-2) FROM DUAL;  
--Round函数(用于四舍五入),右边的数字为正数,保留几位有效数字,右边的值为负数,精确的是整数位  
SELECT TRUNC(40.66),TRUNC(40.66,1),TRUNC(40.66,-1),TRUNC(140.66,-2) FROM DUAL;  
--TRUNC函数(不进行四舍五入),右边的数字为正数,保留几位有效数字,右边的值为负数,精确的是整数位  
SELECT Upper('hello WORLD') FROM DUAL;  
-- Upper小写转大写  
SELECT Lower('hello WORLD') FROM DUAL;  
-- Lower大写转小写  
SELECT LPAD('hello WORLD',8), LPAD('hello WORLD',18,'X') FROM DUAL;  
--截取左侧N个字符,如果字符数量不够从左侧补充空格,也可以用某一字符替换  
SELECT RPAD('hello WORLD h',8), RPAD('hello WORLD',18,'X') FROM DUAL;  
--截取左侧N个字符,如果字符数量不够从右侧补充,也可以用某一字符替换  
SELECT TRIM(leading 'h' FROM 'hhhello WORLD h') FROM DUAL;  
SELECT TRIM(trailing 'h' FROM 'hhhello WORLD h') FROM DUAL;  
SELECT TRIM(both 'h' FROM 'hello WORLD h') FROM DUAL;  
--去掉首尾字符,常用于去掉首尾空格,也可以指定去掉首或尾  
SELECT LTRIM('hhheeeeello WORLD h','hel') FROM DUAL;  
--去掉左侧按照字符串中字符顺序的字符  
SELECT RTRIM('hhheeeeello WORLD h','hel') FROM DUAL;  
--去掉右侧按照字符串中字符顺序的字符  
SELECT SUBSTR('hello WORLD',1,3), SUBSTR('hello WORLD',-1,3) FROM DUAL;  
--默认从左侧开始截取,当为负数时从右侧截取  
SELECT REPLACE('hhheeeeello WORLD h','o','') FROM DUAL;  
--字符串替换,当替换的字符为空时,可以用来删除存在的特定字符,不支持大小写  
SELECT TRANSLATE('hhheeeeello WORLDhedh','hed','QP') FROM DUAL;  
--绝对匹配,左侧第一个字符对应右侧第一个,第二个对应第二个,第三个对应字符没有即对应空  
SELECT INSTR('abcdefgasdasd','as',1),INSTR('abcdefgasdasd','as',-1) FROM DUAL;  
--找匹配字符串,正数为从左边开始找的第一个匹配的字符串,负数是从右边开始找第一个匹配的字符串  
SELECT LENGTH('A123我方'), LENGTH(''), LENGTH(' ') FROM DUAL;  
--查找字符串长度,这里中文也占1位,为空和为NULL的值是不一样的  
SELECT TO_CHAR(SYSDATE,'YYYYMMDD') FROM DUAL;  
--日期型转化为字符型,后面是格式  
SELECT TO_NUMBER('100') FROM DUAL;  
--字符型转换为日期型  
SELECT TO_DATE('20111110', 'yyyy-mm-dd ') FROM DUAL;  
--字符型转换成日期型,后面是格式  
select decode('a2','a1','false1','a2','true1','defalut') from dual;  
--假如a2=a1,返回false1,如果a2=a2,返回true1,都不满足返回defalut。相当与if...elseif...else  
SELECT NVL('13', '12') FROM DUAL;  
--假如非空,则返回原值,否则返回后面的  
   
   
--不常用函数  
case... when ...then else ...end  
select empno, ename, sal,  
case deptno  
when 10 then '财务部'  
when 20 then '研发部'  
when 30 then '销售部'  
else '未知部门'  
end 部门  
from emp;  
 Oracle数据库中日期的默认格式为DD-MON-YY。可以通过设置NLS_DATE_FORMAT参数设置当前会话的日期格式,通过NLS_LANGUAGE参数设置表示日期的字符集。  
--例如:  
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';  
alter session set nls_language='AMERICAN';  
Month_between 返回整數  
SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL;  
--正数表示返回12月之后的函数,负数表示返回12月之前的函数  
select next_day(sysdate,'星期一') from dual  
--next_day 返回从 Sysdate 开始的下一个星期一,亦可以用数字表示,1表示下个星期日,2表示下个星期一  
select current_date from dual;  
SELECT SYSDATE,CURRENT_DATE FROM DUAL;  
--sysdate和current_date可能相差一秒  
SELECT last_day(SYSDATE) FROM DUAL;  
--当前月的最后一天  
SELECT NEXT_DAY(SYSDATE,1),NEXT_DAY(SYSDATE,4),NEXT_DAY(SYSDATE,'Thursday'),next_day(sysdate, 'Friday ') FROM DUAL;  
--如果为数字,返回下周的某一天(周日为1,周一为2,依次计算),否则返回从这周开始找,如果在这周返回这周的日期;否则,返回下一个星期的星期几  
SELECT  months_between(SYSDATE, add_months(sysdate, -1)) FROM DUAL;  
--计算月份之间相差多少  
SELECT GREATEST(15,5,75,8) "Max",LEAST(15,5,75,8) "Min" FROM DUAL;  
--取出字符序列中的最大值、最小值  
SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;  
--假如取的值和前一个字符相同,则返回NULL,否则返回字符值  
select nvl2('A', 'B', 'C'),nvl2(null, 'B', 'C')  from dual;  
--如果A等于B,则返回  
SYS_CONNECT_BY_PATH(col,c)  
-- 该函数只能应用于树状查询  
select  
 SYS_CONTEXT('USERENV','TERMINAL') terminal,  
 SYS_CONTEXT('USERENV','DB_NAME') db_name,  
 SYS_CONTEXT('USERENV','HOST') host,  
 SYS_CONTEXT('USERENV','OS_USER') os_user,  
 SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,  
 SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol  
 from dual ;  
--返回当前用户信息,还有好几项如:language等不列举了
------------------------------------------------------------------------------------------------
SELECT d.bussno,    
       (SELECT substr(to_char(l.makedate,'YYYY-MM-DD'), 0, 10) || ' ' || l.maketime    
          FROM ocr_loaddetail l    
         WHERE l.bussno = d.bussno    
           and l.loadstate = 0) as loaddate,    
       --载入时间,拼出日期和时间    
       (substr(to_char(d.recogenddate,'YYYY-MM-DD'), 0, 10) || ' ' || d.recogendtime) as regdate,    
       (substr(to_char(d.proofstartdate,'YYYY-MM-DD'), 0, 10) || ' ' || d.proofstarttime) as psdate,    
       (substr(to_char(d.proofenddate,'YYYY-MM-DD'), 0, 10) || ' ' || d.proofendtime) as pedate,    
       (substr(to_char(d.givehlisdate,'YYYY-MM-DD'), 0, 10) || ' ' || d.givehlistime) as ghdate,    
       d.proofoperator,    
       round(to_number(to_date((substr(to_char(d.proofenddate,'YYYY-MM-DD'), 0, 10) || ' ' || d.proofendtime),'yyyy-mm-dd hh24:mi:ss')-    
       to_date((substr(to_char(d.proofstartdate,'YYYY-MM-DD'), 0, 10) || ' ' || d.proofstarttime),'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60) as aging,    
       --round()取整,小数部分四舍五入。to_number()转化成数字。to_date()将字符串转化成时间。to_char()日期转化成字符串。substr()拼接字符串    
       round(to_number(to_date((substr(to_char(d.givehlisdate,'YYYY-MM-DD'), 0, 10) || ' ' ||d.givehlistime),'yyyy-mm-dd hh24:mi:ss') -    
                 to_date((SELECT substr(to_char(l.makedate,'YYYY-MM-DD'), 0, 10) || ' ' || l.maketime FROM ocr_loaddetail l WHERE l.bussno = d.bussno and l.loadstate = 0),'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60) as sysdealtime    
  FROM ocr_docdetail d    
 WHERE 1 = 1    
   and d.ProofStartDate >= date '2011-10-28'    
   and d.ProofStartDate <= date '2013-01-21'    
   and d.managecom like '86%'    
 order by d.managecom asc, d.proofstartdate asc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值