暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL和Oracle字符串截取函数用法总结(比较)

伦少的博客 2021-11-30
953

点击上方'伦少的博客'关注与您一起成长

前言

本文总结MySQL和Oracle的字符串截取函数的用法

工作中MySQL和Oracle都用,有时会碰到两种数据库SQL用法的不同,就会上网查一下,但是时间久了,就忘记了,好记性不如烂笔头,所以写个笔记备忘一下~

1、MySql

函数:SUBSTRING 或 SUBSTR

1.1 语法

位置

1SUBSTRING(string,position);
2SUBSTRING(string FROM position);

位置和长度

1SUBSTRING(string,position,length);
2SUBSTRING(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(包含)开始

1SELECT SUBSTRING('Hello World',1);
2SELECT SUBSTRING('Hello World' FROM 7);

1Hello World
2World

position=0返回空

1SELECT SUBSTRING('Hello World',0);

position<0,与position为正时是一样的,下面的sql的效果是相同的

1SELECT SUBSTRING('Hello World',-11);
2SELECT SUBSTRING('Hello World' FROM -5);

当position的绝对值>LENGTH(string)时,返回空,和position=0时一样

1SELECT SUBSTRING('Hello World',12);
2SELECT SUBSTRING('Hello World',-12);

1.3.2 位置和长度

position的用法和上面讲的是一样的,下面仅总结length
length>0时返回length个字符数,当length>string的可截取的长度时,只返回可截取的长度

1SELECT SUBSTRING('Hello World',1,5);
2SELECT SUBSTRING('Hello World',6,20);

1Hello
2World

length<=0时返回空

1SELECT SUBSTRING('Hello World',1,0);
2SELECT SUBSTRING('Hello World',1,-20);

下面等价

1SELECT SUBSTRING('Hello World',6,20);
2SELECT SUBSTRING('Hello World' FROM 6 FOR 20);

可通过LENGTH查看字符串的长度验证(当length>string的可截取的长度时)

1SELECT LENGTH(SUBSTRING('Hello World' FROM 6 FOR 20));

16

2、Oracle

函数:SUBSTR

和MySql不同的是没有SUBSTRING

2.1 语法

位置

1SUBSTR(string,position);
2SUBSTR(string FROM position);

位置和长度

1SUBSTR(string,position,length);
2SUBSTR(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效果一样

1SELECT SUBSTR('Hello World',0FROM DUAL;
2SELECT SUBSTR('Hello World',1FROM DUAL;
3SELECT SUBSTR('Hello World',-11FROM DUAL;

1Hello World

当position的绝对值>LENGTH(string)时,返回[NULL]

1SELECT SUBSTR('Hello World',12FROM DUAL
2SELECT SUBSTR('Hello World',-12FROM DUAL;

1[NULL]

2.3.2 位置和长度

position的用法和上面讲的是一样的,下面仅总结length
length>0时返回length个字符数,当length>string的可截取的长度时,只返回可截取的长度,这点和MySQL相同

1SELECT SUBSTR('Hello World',1,5FROM DUAL;
2SELECT SUBSTR('Hello World',6,20FROM DUAL;

1Hello
2World

length<=0时返回[NULL],这点和MySQL不同

1SELECT SUBSTR('Hello World',1,0FROM DUAL;
2SELECT SUBSTR('Hello World',6,-20FROM 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]

关注我


文章转载自伦少的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论