天天看點

Oracle 與 MySQL 的差異分析(5):字元串函數

Oracle 與 MySQL 的差異分析(5):字元串函數

1 字元串連接配接

1.1 Oracle

select name || ‘hello’ from test;

select concat(name, score) from test;

Oracle 中一般使用 || 拼接字元串。

1.2 MySQL

select concat(name, sorce) from test;

MySQL 的concat 支援多個參數,而 Oracle 隻支援兩個參數;MySQL 的 concat 如果參數為 null,則結果為 null,而 Oracle 不是。

select concat_ws(‘_’, ‘abc’, ‘ddd’, ‘eee’);

concat_ws 的第一個參數是拼接的分隔符,後面是任意多個字元串。

2 字元串截取

2.1 Oracle

select substr(‘abcd’, 2, 1) from dual;

參數1:待截取字元串;

參數2:起始位置,從1開始,如果為負數,那麼從右往左數;

參數3(可選):截取長度,為空時截取到最後一個字元。

2.2 MySQL

select substring(‘abcd’, 2, 1);

使用方法與 Oracle 的 substr 相同。

除了 substring,MySQL 還可以用 left 和 right 傳回左邊或右邊 N 個字元:

select left(‘Abcdef’, 2);

select right(‘Abcdef’, 2);

3 判斷字元串 A 是否包含字元串 B

3.1 Oracle

select instr(‘abcd’, ‘bc’) from dual;

傳回結果如果0,表示不存在,否則表示在第一個字元串中的位置,從1開始。

它還有2個可選參數:從第幾個字元開始查找和查找第幾次出現的位置,預設都為1。

3.2 MySQL

select instr(‘abcd’, ‘bc’);

用法與 Oracle 相同,不過隻支援兩個參數。

4 字元串替換

4.1 Oracle

select replace (‘abcdef’, ‘bcd’, ‘ijklmn’) value from dual;

4.2 MySQL

select replace (‘abcdef’, ‘bcd’, ‘ijklmn’);

二者用法相同,不過 Oracle 支援不傳第三個參數,表示把第二個字元串删除,而 MySQL 不支援這種用法,如果想實作這個能力,可以把第三個參數設為空字元串(不是null):

select replace (‘abcdef’, ‘bcd’, ‘’);

MySQL 還支援按照位置替換,如下表示把 ’abcdef’ 從第二個字元開始的第三個字元替換為 ‘dd’:

select insert (‘abcdef’, 2, 3, ‘dd’);

5 大小寫轉換

upper (‘Abcdef’)

lower (‘Abcdef’)

二者用法相同。

6 字元串填充

lpad (‘abc’, 10, ‘0’)

rpad (‘abc’, 10, ‘0’)

二者用法相同,lpad 為左填充,rpad 為右填充;三個參數的意義分别為:要填充的字元串,填充後的長度,填充的字元串。

7 去除字元串的空格

trim (‘ abc ’)

ltrim (‘ abc ’)

rtrim (‘ abc ’)

二者用法相同,trim 去除頭尾的空格,ltrim 去除左側的空格,rtrim去除右側的空格。

8 傳回字元串重複N遍的結果

select repeat (‘abc’, 10);

MySQL 特有的函數,傳回字元串重複N遍的結果。

9 字元串 ASCII 比較

select strcmp (‘abc’, ‘dd’);

MySQL 特有的函數,如果第一個字元串小于第二個字元串,傳回-1;如果相同,傳回0;如果大于,則傳回1。

10 擷取字元串長度

10.1 Oracle

1、傳回字元數:

select length (‘你好’) from dual;

2、傳回位元組數:

select lengthb (‘你好’) from dual;

10.2 MySQL

1、傳回位元組數:

select length (‘你好’);

2、傳回字元數:

select char_length (‘你好’);

11 ASCII 轉換

11.1 Oracle

1、擷取字元的 ASCII:

select ascii (‘a’) from dual;

2、根據 ASCII擷取字元:

select chr (97) from dual;

11.2 MySQL

1、擷取字元的 ASCII:

select ascii (‘a’);

2、根據 ASCII擷取字元:

select char (97);

注:MySQL 的 char 支援多個參數,可以傳回一個字元串,而 Oracle 不支援多個參數:

select char (77, 121, 83, 81, 76);

傳回值為:MySQL