Oracle 常用内置函数

版权声明:杨杨杨~~的版权 https://blog.csdn.net/weixin_38316697/article/details/83861746

数据库内置函数-常用函数

1、abs(); --返回数字n的绝对值

select abs(-8.3) from dual;


2、ceil(); --返回>=数字n的最小整数

select * from (
select ceil(-18.9) AS 结果 from dual  --负数
union
select ceil(19.1) AS 结果 from dual   --正数
);


3、floor(n) --返回<=数字n的最小整数

select * from (
select floor(-18.9) AS 结果 from dual  --负数
union
select floor(19.1) AS 结果 from dual   --正数
);


4、ROUND(n,[m]) --四舍五入运算,如果m缺省则四舍五入到整数位

                            --m<0,四舍五入到小数点的前m位,m>0四舍五入到小数点的后m位

select *  from (
 select Round(-855.7845,-1) AS 结果 from dual  --m<0
union
 select ROUND(-855.7845) AS 结果 from dual     --缺省
union
 select ROUND(-855.7845,1) AS 结果 from dual   --m>0
);


5、trunc(n,[m]); --截取数字,如果m缺省则将小数位截去

                           --m<0,截取到小数点的前m位,m>0截取到小数点的后m位

select *  from (
 select trunc(-855.7845,1) AS 结果 from dual   --m>0
union
 select trunc(-855.7845) AS 结果 from dual     --缺省
union
 select  trunc(-856.7845,-1) AS 结果 from dual  --m<0
) ;


6、ascii(n):返回字符c的ascii值与 chr(n):将ascii值转换为对应的字符

select  ascii('A')AS 效果 from dual;

select  chr(65) AS 效果 from dual;


7、转换大小写initcap(s),lower(s),upper(s)

   initcap(s):将字符串s所有的单词(依空格或非字母字符划分单词区间)的首字母大写,其余小写

select  initcap('YZY;HELLO') AS 效果 from dual;

   lower(s):将字符串s中所有的字符转换为小写

select lower('YZY;HELLO') AS 效果 from dual;

upper(s):将字符串s中所有的字符转换为大写

select upper('YZY;HELLO') AS 效果 from dual;


8、concat(s1,s2)字符串链接和 length(s)字符串长度

   --将字符串s2连接在s1后面,等同于操作符||

select concat('Hello',' World') AS 效果 from  dual;

--将返回字串s的长度,返回的长度包括其中的所有空格(尾部空格也算);如果s为null,则返回null

select length('Hello World') AS 效果 from  dual;


9、 instr 索引位置与substr 截取

  instr(s1,s2,n,m):    取得子串s2在字串s1中的位置

                               n表示在s1中开始搜索的位置,m表示字串s2出现的次数

                               如果n为负数,则表示从尾部开始搜索,n与m默认为1

--n为负数时查询反方向查找
select instr('888terryterry','terry',-5,1) AS 效果 from dual;  

--n为正数时查询正方向查找
select instr('888terryterry','terry',1,1) AS 效果 from dual; 

substr(s1,m,n)取得字串s1从m开始,长度为n的子串,m>0表示从头开始搜索,m<0表示从尾开始

SELECT substr('李藝輝',1,2) AS 效果 FROM dual ;

SELECT substr('terry',-4,3) AS 效果 FROM dual;


10replace(s1,s2,s3):替换

    replace(s1,s2,s3):将s1字串中的子串s2用s3替代,如果s2为null则返回原来的字串s1

            注意:如果s3为null,则会去掉子串s2

SELECT replace('李藝輝-TERRY','李藝輝','杨镇宇') AS 效果  FROM dual;

select  replace('李藝輝-TERRY','李藝輝')  AS 效果 from dual;


11、add_months(d,n)  :返回指定日期d之后(或前)的n個月所對應的日期時間;n>0:之后,n<0:之前

select * from (
select add_months(sysdate,1)  AS 效果 from dual --根据系统时间,判断上个月的当前时间
UNION
select add_months(sysdate,-1) AS 效果 from dual --根据系统时间,判断下个月的当前时间
)


12,LAST_DAY(d) 返回当前月份的最后一天

select LAST_DAY(SYSDATE) from dual;


13、next_day(d,char) 返回指定日期后的一個工作日(由char指定)所對應的日前

select next_day(SYSDATE,'星期二') from dual;


14、日期操作  round(d[,fmt])trunc(d[,fmt])

  round(d[,fmt]):返回日期時間的四舍五如結果,如果fmt指定年度则7月1日为分界线

                           如果fmt指定月则16日为分界线,如果fmt指定天则中午12:00为分界线

  trunc(d[,fmt]):用于截断日期时间数据,如果fmt指定年度则结果为本年的1月1日

                          如果fmt指定月则指定本月的1日,如果fmt空則結果为截取的日期时间数据中的日期


15months_between(d1,d2)

返回日期d1与d2之间相差的月份数

如果d1<d2則返回负数,如果d1和d2的天数相同或都是月底則返回正数,否則oracle以每月31天为准来计算結果的小数部份 

select months_between(
to_date('2017-02-12 01:19:09', 'YYYY/MM/DD HH24:MI:SS'),
to_date('2013-08-08 11:39:09', 'YYYY/MM/DD HH24:MI:SS')
) AS 相差月份数 from dual


16coalesce(expr1[,expr2]...):返回運算式中第一個not null運算式的結果

select coalesce('','','terry','zhanna') AS 效果  from dual;


17 nullif(expr1,expr2):

     比較expr1和expr2,如果二者相等則返回null,否則返回expr1

select * from (
select nullif(1,2) from dual
union
select nullif(1,1) from dual
)


18decode

(1)判断字符串是否一样

DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

  • 含义为
  • IF 条件=值1 THEN
  •     RETURN(value 1)
  • ELSIF 条件=值2 THEN
  •     RETURN(value 2)
  •     ......
  • ELSIF 条件=值n THEN
  •     RETURN(value 3)
  • ELSE
  •     RETURN(default)
  • END IF
select decode('1','2','哈哈','1','你好','3','看看','剩余') AS 效果 from dual;

(2)检索字符串是否包含值

select  DECODE(INSTR('ENAME', 'S'),0,'不含有s','含有s') AS 效果 from dual;

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/83861746