前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
本文总结MySQL和Oracle的字符串截取函数的用法
工作中MySQL和Oracle都用,有时会碰到两种数据库SQL用法的不同,就会上网查一下,但是时间久了,就忘记了,好记性不如烂笔头,所以写个笔记备忘一下~
1、MySql
函数:SUBSTRING 或 SUBSTR
1.1 语法
位置1
2SUBSTRING(string,position);
SUBSTRING(string FROM position);
位置和长度1
2SUBSTRING(string,position,length);
SUBSTRING(string FROM position FOR length);
1.2 下标
- | H | e | l | l | 0 | W | o | r | l | d | |
---|---|---|---|---|---|---|---|---|---|---|---|
正数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
负数 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
1.3 示例详解
1.3.1 位置
position>0,从position(包含)开始1
2SELECT SUBSTRING('Hello World',1);
SELECT SUBSTRING('Hello World' FROM 7);
1 | Hello World |
position=0返回空1
SELECT SUBSTRING('Hello World',0);
1 |
position<0,与position为正时是一样的,下面的sql的效果是相同的
1 | SELECT SUBSTRING('Hello World',-11); |
当position的绝对值>LENGTH(string)时,返回空,和position=0时一样1
2SELECT SUBSTRING('Hello World',12);
SELECT SUBSTRING('Hello World',-12);
1.3.2 位置和长度
position的用法和上面讲的是一样的,下面仅总结length
length>0时返回length个字符数,当length>string的可截取的长度时,只返回可截取的长度1
2SELECT SUBSTRING('Hello World',1,5);
SELECT SUBSTRING('Hello World',6,20);
1 | Hello |
length<=0时返回空
1 | SELECT SUBSTRING('Hello World',1,0); |
1 |
下面等价
1 | SELECT SUBSTRING('Hello World',6,20); |
可通过LENGTH查看字符串的长度验证(当length>string的可截取的长度时)1
SELECT LENGTH(SUBSTRING('Hello World' FROM 6 FOR 20));
1 | 6 |
2、Oracle
函数:SUBSTR
和MySql不同的是没有SUBSTRING
2.1 语法
位置1
2SUBSTR(string,position);
SUBSTR(string FROM position);
位置和长度1
2SUBSTR(string,position,length);
SUBSTR(string FROM position FOR length);
2.2 下标
- | H | e | l | l | 0 | W | o | r | l | d | |
---|---|---|---|---|---|---|---|---|---|---|---|
正数 | 0或1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
负数 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
2.3 示例详解
2.3.1 位置
与MySQL一样,position>0和position<0时是一样的效果,参照上面的下标对应即可,不同的是,position=0和position=1的效果是一样的。
下面三个sql效果一样
1 | SELECT SUBSTR('Hello World',0) FROM DUAL; |
1 | Hello World |
当position的绝对值>LENGTH(string)时,返回[NULL]
1 | SELECT SUBSTR('Hello World',12) FROM DUAL |
1 | [NULL] |
2.3.2 位置和长度
position的用法和上面讲的是一样的,下面仅总结length
length>0时返回length个字符数,当length>string的可截取的长度时,只返回可截取的长度,这点和MySQL相同
1 | SELECT SUBSTR('Hello World',1,5) FROM DUAL; |
1 | Hello |
length<=0时返回[NULL],这点和MySQL不同
1 | SELECT SUBSTR('Hello World',1,0) FROM DUAL; |
1 | [NULL] |
3 比较总结
最后比较一下MySQL和Oracle的不同
- 1、 MySQL函数为SUBSTRING 或 SUBSTR,Oracle只有SUBSTR
- 2、 position=0时MySQL返回空,而Oracle和position=1时一样
- 3、 当position的绝对值>LENGTH(string)时和length<=0时,MySQL返回空,而Oracle返回[NULL]