mysql oracle 区别

1、substr

oracle:

取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] )
参数1:string 要处理的字符串 
参数2:a 截取字符串的开始位置(起始位置是1) 
参数3:b 截取的字符串的长度(而不是字符串的结束位置) 

 

select substr('Hello World',2,1) from dual;
select substr('Hello World',1,1) from dual;
select substr('Hello World',0,1) from dual;

结果为 e,H,H   证明 substr 起始位置是从1开始。

 

mysql:

substr(string string,num start,[num length]);

string为字符串;

start为起始位置(起始位置为1);

length为长度。

select substr('Hello World',2,1)  ;
select substr('Hello World',1,1)  ;
select substr('Hello World',0,1)  ;

结果为 e,H, 。  

 

2、null  和 ''

  例如:select * from address 的数据如下。

 

oracle:

select decode(USE_TYPE,'', 1 , 2) as a from address;
select decode(USE_TYPE,null, 1 , 2) as a from address;

 

select  null,1+null,concat('a',null) from dual

 

select   * from address where use_type=null;
select   * from address where use_type=''

结果都为:

 

select   * from address  where use_type like '%' 

 

 

 

select  count(*),count(use_type) from address

 

排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。  

 

无数次在oracle中写查询语句的时候都曾加上这么一句 aa!=''或者在嵌套的时候以 某某!='' ;来做条件,今天查了资料才发现,在oracle中空字符串("")和null是一样的,也就是说你的数据库中的数据只要是为空(无论是空字符串还是null),都可以用 not is null或is null来作查询条件查询。但是在写程序的时候,你的语句中包含aa!=''之类的条件的话 会自动转换成is not null。

 mysql :

 select case when USE_TYPE  is   null then 1 else 2 end as a from address;

  执行结果为

                 1

                 2。

 说明 null 和 空字符串不一样。  

 在SQL中,NULL值与任何其它值的比较(即使是NULL)永远不会为“真”。包含NULL的表达式总是会导出NULL值,

除非在关于操作符的文档中以及表达式的函数中作了其他规定。下述示例中的所有列均返回NULL:

mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL); 

如果打算搜索列值为NULL的列,不能使用expr = NULL测试。下述语句不返回任何行,这是因为,对于任何表达式,expr = NULL永远不为“真”:

mysql> SELECT * FROM address WHERE USE_TYPE = NULL;

  

SELECT * FROM address WHERE USE_TYPE ='';

 

  使用DISTINCT、GROUP BY或ORDER BY时,所有NULL值将被视为等同的。

  使用ORDER BY时,首先将显示NULL值,如果指定了DESC按降序排列,NULL值将最后显示。

     

SELECT * FROM address  order by use_type desc

  对于聚合(累计)函数,如COUNT()、MIN()和SUM(),将忽略NULL值。对此的例外是COUNT(*),它将计数行而不是单独的列值。例如,下述语句产生两个计数。首先计数表中的行数,其次计数age列中的非NULL值数目:mysql> SELECT COUNT(*), COUNT(age) FROM person;

  使用上面的数据:

     

SELECT count(*),count(use_type) FROM address  

  对于某些列类型,MySQL将对NULL值进行特殊处理。如果将NULL插入TIMESTAMP列,将插入当前日期和时间。如果将NULL插入具有AUTO_INCREMENT属性的整数列,将插入序列中的下一个编号。

 

 

 

mysql  oracle  substr 的区别 

mysql substr('字符串',0,1) 如果是0 则不返回

posted @ 2013-07-02 17:32  nextnj  阅读(339)  评论(0编辑  收藏  举报