您的位置:首页 > 数据库 > Oracle

mysql oracle 区别

2013-07-02 17:32 225 查看
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 则不返回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: