Oracle和Mysql中Sql语句中的一些函数用法区别

1、字符串拼接函数CONCAT();

Mysql中:concat()函数里面可以放多个字符串来拼接


Oracle和Mysql中Sql语句中的一些函数用法区别_第1张图片

Oracle 中concat()函数 只能拼接两个字符串

Oracle和Mysql中Sql语句中的一些函数用法区别_第2张图片

当然 如果想拼接多个字符串  用 || 符号

Oracle和Mysql中Sql语句中的一些函数用法区别_第3张图片

2、mysql和Oracle分页的区别

    mysql中,用 LIMIT 就可以实现分页:

Oracle和Mysql中Sql语句中的一些函数用法区别_第4张图片

    Oracle中,需要用 rownum 就可以实现分页:
Oracle和Mysql中Sql语句中的一些函数用法区别_第5张图片
或者 : rownum between ** and **

Oracle和Mysql中Sql语句中的一些函数用法区别_第6张图片

一般来讲,就是首先查询无分页的数据,然后外层套一层查询,加个伪列ROWNUM,控制查询的条数,然后再在外层查一次,控制查询的起始位置,如下代码

SELECT * FROM  (                   黑色查询控制开始的位置             
SELECT A.*, ROWNUM RN  FROM (     绿色查询无分页的数据后控制查询的条数
select p.*  FROM                     红色查询无分页的数据
EP_BASE_KY_PROJECT p 
WHERE p.PZRQ IS not NULL 
ORDER BY p.RESOURCE_ID
) A  
WHERE ROWNUM <= 10  

)  WHERE RN >= 0 



3、GROUP BY用法区别

mysql中GROUP BY 比较随意  没有太多限制

Oracle和Mysql中Sql语句中的一些函数用法区别_第7张图片

Oracle中GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,如果有查询多个返回信息,group by后 的信息要和查询的信息一致(除了聚合函数等等之外的字段都要在group by后面,不然会报错)
Oracle和Mysql中Sql语句中的一些函数用法区别_第8张图片
Oracle和Mysql中Sql语句中的一些函数用法区别_第9张图片

4、mysql中的IFNULL与 ORACLE 中的 nvl 用法区别、

mysql中  
              IFNULL(a,b); 如果a为空,就显示b的值

oracle中

              nvl(x,value)将一个NULL转换为另外一个值,如果x为NULL,则返回value,否则返回x值本身

                        insert into student values(7,'猪猪',default,NULL);
                        select nvl(address,'北京市') from student;
              nvl2(x,value1,value2),如果x不为NULL,返回value1,否则,返回value2

                        select nvl2(address,'有地址','无地址') from student;

举个例子:这两块代码效果是一样的

SELECT * FROM  (  
SELECT A.*, ROWNUM RN  FROM (
select p.RESOURCE_ID,NVL(p.PZRQ,'暂无')  FROM
EP_BASE_KY_PROJECT p  
ORDER BY p.RESOURCE_ID) A  
WHERE ROWNUM <= 10  
)  WHERE RN >= 0 

SELECT * FROM  (  
SELECT A.*, ROWNUM RN  FROM (
select p.RESOURCE_ID,NVL2(p.PZRQ,p.PZRQ,'暂无')  FROM
EP_BASE_KY_PROJECT p  
ORDER BY p.RESOURCE_ID) A  
WHERE ROWNUM <= 10  
)  WHERE RN >= 0 

Oracle和Mysql中Sql语句中的一些函数用法区别_第10张图片

5、oralce函数substr和mysql函数substring_index

MYSQL中:
substring_index(str,delim,count) 返回字符串str中在第 count 个出现的分隔符 delim之前的子串,和java中的str.substring函数类似。  
如果count是正数时候,substring_index是从左到右的顺序检查分隔符delim所在的位置。  
如果count是负数时候,substring_index是从右到左的顺序检查分隔符delim所在的位置,返回的是从字符串str左边下标1开始的下标位置。  
特殊点如果count等于0,那么,不管delim是否在str中存在,你得到的将是一个空白字符串

select substring_index('ABC_CE_FG','_',2) from dual;--ABC_CE 
select substring_index('ABC_CE_FG','_',-2) from dual;--CE_FG  
select substring_index('ABC_CE_FG','_',0) from dual;--空白字符串  
select substring_index('ABC_CE_FG','_',3) from dual;--ABC_CE_FG

ORACLE中:

先看看两个函数的作用

  1. instr( string1, string2 [, start_position [, nth_appearance ] ] )  
  2. string1 源字符串  
  3. string2 目标字符串.  
  4. start_position 从string1 的哪个位置开始查找。默认为1. 字符串索引从1开始。为正,从左到右开始检索,为负,从右到左检索。  
  5. nth_appearance 代表要查找第几次出现的string2. 此参数可选,默认为 1.不能为负数  
  6. 返回要查找的字符串string2在源字符串string1中的符合条件的开始索引  
  1. substr(string,start_position,length)  
  2. string 源字符串,即被截取的字符串.  
  3. start_position 字符截取的开始位置.start_position大于0时,从左边算起,小于0时,从右边查起  
  4. length 截取字符的个数.默认截取到最后一位.  

select instr('ABC_CE_FG', '_',-1,2) from dual  --4   负数就从右边数,第二次出现_ 的位置是4(这个位置从左往右数)

select instr('ABC_CE_FG', '_',1,2) from dual  --7   正数就从左边数,第二次出现_ 的位置是4(这个位置从左往右数)

mysql中的:

            select substring_index('ABC_CE_FG', '_', 2);  --ABC_CE

oracle可以这样写:

            select substr('ABC_CE_FG', 1,instr('ABC_CE_FG', '_',1,2)-1)from dual    --从左边开始 到第六位







你可能感兴趣的:(Oracle)