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 则不返回