點擊上方'倫少的博客'關注與您一起成長
前言本文總結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);
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);
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
函數:SUBSTR
和MySql不同的是沒有SUBSTRING
2.1 語法位置
1SUBSTR(string,position);
2SUBSTR(string FROM position);
位置和長度
1SUBSTR(string,position,length);
2SUBSTR(string FROM position FOR length);
與MySQL一樣,position>0和position<0時是一樣的效果,參照上面的下標對應即可,不同的是,position=0和position=1的效果是一樣的。
下面三個sql效果一樣
1SELECT SUBSTR('Hello World',0) FROM DUAL;
2SELECT SUBSTR('Hello World',1) FROM DUAL;
3SELECT SUBSTR('Hello World',-11) FROM DUAL;
1Hello World
當position的絕對值>LENGTH(string)時,返回[NULL]
1SELECT SUBSTR('Hello World',12) FROM DUAL
2SELECT SUBSTR('Hello World',-12) FROM DUAL;
1[NULL]
position的用法和上面講的是一樣的,下面僅總結length
length>0時返回length個字符數,當length>string的可截取的長度時,只返回可截取的長度,這點和MySQL相同
1SELECT SUBSTR('Hello World',1,5) FROM DUAL;
2SELECT SUBSTR('Hello World',6,20) FROM DUAL;
1Hello
2World
length<=0時返回[NULL],這點和MySQL不同
1SELECT SUBSTR('Hello World',1,0) FROM DUAL;
2SELECT SUBSTR('Hello World',6,-20) FROM DUAL;
1 [NULL]
最後比較一下MySQL和Oracle的不同
1、 MySQL函數為SUBSTRING 或 SUBSTR,Oracle只有SUBSTR
2、 position=0時MySQL返回空,而Oracle和position=1時一樣
3、 當position的絕對值>LENGTH(string)時和length<=0時,MySQL返回空,而Oracle返回[NULL]