1. 拼接字符串函數(shù)concat(str1,str2)
- 功能:拼接兩個字符串
- 參數(shù):str1,str2 字符串(數(shù)值會自動轉(zhuǎn)換),只能有2個參數(shù)
- 返回:str1和str2拼接在一起的字符串
SQL和執(zhí)行結(jié)果:
SELECT CONCAT(123, 'abc'),
CONCAT('abc', 'def'),
123 || 'ghi' || 'jkl' || 'mno'
FROM dual;

concat(c1,c2) , ||
類似的:還可以用
||連接字符串,concat(str1,str2)和str1||str2都能拼接字符串
不同的是,concat()函數(shù)只能拼接2個字符串,||可以連接多個字符串
2. 查找字符串位置instr(str1,str2[,pos][,nth])
- 功能:在str1中查找str2的位置
- 參數(shù):
str1,str2 字符串,
pos:數(shù)值型參數(shù),表示從第pos個字符的位置開始查找,默認(rèn)值為1,表示從第1個字符開始查找
nth:數(shù)值型參數(shù),表示第nth次出現(xiàn),默認(rèn)值為1,表示第1次出現(xiàn)str2- 返回:按條件查找到的str2在str1中的位置,即str2從str1的第幾位開始(漢字算作1個字符),若找不到則返回0
SQL和執(zhí)行結(jié)果:
SELECT INSTR('一二三abc123abcabc', 'bc'),
INSTR('一二三abc123abcabc', 'bc', 6),
INSTR('一二三abc123abcabc', 'bc', 6, 2),
INSTR('一二三abc123abcabc', 'bc', 6, 3)
FROM dual;

instr(str1,str2[,pos][,nth])
類似的函數(shù)有instrb(str1,str2[,pos][,nth]),區(qū)別在于漢字/全角字符算2個字符
3. 計算字符串長度length(str1)
- 功能:計算字符串str1的長度
- 參數(shù):str1 字符串
- 返回:字符串str1的長度,漢字算作1個字符
SQL和執(zhí)行結(jié)果:
SELECT LENGTH('一二三123abc') FROM dual;

length(str1)
類似的函數(shù)有l(wèi)engthb(str1),漢字/全角字符算2個字符
其他如lengthc(),length2(),length4()較少使用
4. 字符補到指定長度
4.1 左側(cè)補位函數(shù)lpad(str1,len[,pad])
- 功能:在str1左側(cè)用pad字符補位到整個字符串長度為len
- 參數(shù):str1 字符串,len 數(shù)值,pad 字符串
- 返回:在str1基礎(chǔ)上,用pad補位到len長度的字符串
4.2 右側(cè)補位函數(shù)rpad(str1,len[,pad])
- 功能:在str1右側(cè)用pad字符補位到整個字符串長度為len
- 參數(shù):str1 字符串,len 數(shù)值,pad 字符串(不填默認(rèn)用空格填充)
- 返回:在str1基礎(chǔ)上,用pad補位到len長度的字符串
SQL和執(zhí)行結(jié)果:
SELECT LPAD(123, 10),
LPAD(123, 10, ' '),
LPAD(123, 10, '0'),
LPAD('abc', 10, 'x'),
LPAD('abc', 10, 'xy')
FROM dual
UNION
SELECT RPAD(123, 10),
RPAD(123, 10, ' '),
RPAD(123, 10, '0'),
RPAD('abc', 10, 'x'),
RPAD('abc', 10, 'xy')
FROM dual;

上lpad(str1,len[,pad]),下rpad(str1,len[,pad])
5. 刪除字符
5.1 刪除左側(cè)字符串ltrim(str1[,tset])
- 功能:從str1左側(cè)第一位開始刪除tset字符,直到遇到第一個非tset字符
- 參數(shù):str1 字符串,tset 字符串(不寫則默認(rèn)為空格)
- 返回:在str1基礎(chǔ)上,刪除左側(cè)tset字符后的字符串
- 過程:以tset字符串的每一個字符為一個外循環(huán),以str1的每一個字符為內(nèi)循環(huán),從str1左側(cè)開始匹配,當(dāng)前循環(huán)的字符相同則從str1中刪除該字符,否則跳出當(dāng)前循環(huán)
SQL和執(zhí)行結(jié)果:
SELECT LTRIM(' ffff7777ebd'),
LTRIM(' ffff7777ebd', ' '),
LTRIM(' ffff7777ebd', ' ebd'),
LTRIM(' ffff7777ebd', ' f'),
LTRIM(' ffff7777ebd', ' f7'),
LTRIM(' ffff7777ebd', ' f7ebd')
FROM dual;

ltrim(str1[,tset])
5.2 刪除右側(cè)字符rtrim(str1[,tset])
- 功能:從str1右側(cè)第一位開始刪除tset字符,直到遇到第一個非tset字符
- 參數(shù):str1 字符串,tset 字符串
- 返回:在str1基礎(chǔ)上,刪除右側(cè)tset字符后的字符串
- 過程:以tset字符串的每一個字符為一個外循環(huán),以str1的每一個字符為內(nèi)循環(huán),從str1右側(cè)開始匹配,當(dāng)前循環(huán)的字符相同則從str1中刪除該字符,否則跳出當(dāng)前循環(huán)
SQL和執(zhí)行結(jié)果:
SELECT RTRIM('ffff7777ddd '),
RTRIM('ffff7777ddd ', ' '),
RTRIM('ffff7777ddd ', ' f'),
RTRIM('ffff7777ddd ', ' d'),
RTRIM('ffff7777ddd ', ' d7'),
RTRIM('ffff7777ddd ', ' d7f')
FROM dual;

rtrim(str1,len[,pad])
5.3 刪除兩側(cè)字符trim(c1 from str2)
- 功能:從str2字符串兩側(cè)同時刪除c1字符
- 參數(shù):
c1 字符串型,只能1位長度,可以是空格或任意字符,漢字算1個字符,默認(rèn)為空格
str2 字符串型,任意字符串- 返回:在str2基礎(chǔ)上,刪除兩側(cè)c1字符后的字符串
SQL和執(zhí)行結(jié)果:
SELECT TRIM(' fff 777 ddd '),
TRIM(' ' FROM ' fff 777 ddd '),
TRIM('f' FROM 'fff777ddd'),
TRIM('7' FROM 'fff777ddd'),
TRIM('南' FROM '南京南站南')
FROM dual;

trim(str1 from c2)
6. 替換字符串replace(src-str,old-str[,new-str])
- 功能:在src-str字符串中,用new-str替換old-str,如無new-str,則直接刪除old-str
- 參數(shù):
src-str 字符串型,原字符串,
old-str 字符串型,希望替換掉的字符串
new-str 字符串型,用來替換old-str,如無new-str,則直接刪除old-str- 返回:在src-str中,用new-str替換old-str后的字符串
SQL和執(zhí)行結(jié)果:
select replace('南京南站南','南') , replace('南京南站南','南','北'),replace('南京南站南','南京','北京') from dual;

replace(src-str,old-str[,new-str])
7. 截取字符串substr(str,pos[,len])
- 功能:在str字符串中,從pos位置開始截取字符串(漢字/全角字符,算1個字符),
- 參數(shù):
str 字符串型,截取前的字符串,
pos 數(shù)值型,從左側(cè)第pos位開始截取字符串,如果為小數(shù)則截取整數(shù)部分,如果為負(fù)數(shù)則從右側(cè)開始計數(shù)
len 數(shù)值型,可選參數(shù),表示截取長度為len的字符串,不寫則默認(rèn)截取到str字符串末尾的所有字符。如果len的值≤0,則返回空白字符串- 返回:從str中第pos位開始截取的長度為len的字符串
SQL和執(zhí)行結(jié)果:
SELECT SUBSTR('ab12南京南34cd', 5),
SUBSTR('ab12南京南34cd', -5),
SUBSTR('ab12南京南34cd', 2.2, 3),
SUBSTR('ab12南京南34cd', 3.8, 3),
SUBSTR('ab12南京南34cd', 2.2, 0),
SUBSTR('ab12南京南34cd', 3.8, -1)
FROM dual;

substr(str,pos[,len])
二進制截取字符串substrb(str,pos[,len])
功能和參數(shù):和substr()函數(shù)一樣
區(qū)別:漢字/全角字符算2個字符
8. 替換對應(yīng)字符串translate(str,src,dest)
- 功能:把str字符串中,src字符串一一對應(yīng)替換成dest字符串
- 參數(shù):
str 字符串型,替換前的字符串
src 字符串型,替換掉的字符串src
dest 字符串型,用于替換src字符串的字符串- 返回:從str中第pos位開始截取的長度為len的字符串
- 說明:
- 如果src和dest字符串長度相同,則將src和dest所有字符依次一一對應(yīng)的方式替換,
例如TRANSLATE('aabb', 'ab', 'AZ'),把所有a對應(yīng)替換為A,所有b對應(yīng)替換為Z
特別的,如果出現(xiàn)重復(fù)字符并且對應(yīng)不同內(nèi)容,后出現(xiàn)的對應(yīng)字符會被忽略,
例如TRANSLATE('1122', '112', '345'),1對應(yīng)3,第二個1對應(yīng)4會被忽略,2對應(yīng)5- 如果src比dest長,那么src中比dest長的字符,也就是在dest沒有對應(yīng)字符的內(nèi)容,會被刪除
例如TRANSLATE('南京南站', '南京站', '西安'),src中的“站”在dest中沒有對應(yīng)字符,則src中的“站”會被刪除- 如果src比dest短,則dest中多余的字符會被忽略
例如TRANSLATE('南京南站', '南京', '西安大略'),src的“南京”,會被替換為dest的“西安”,dest的“大略”會被忽略
SQL和執(zhí)行結(jié)果:
SELECT TRANSLATE('aabb', 'ab', 'AZ'),
TRANSLATE('1122', '112', '345'),
TRANSLATE('南京南站', '南京站', '西安'),
TRANSLATE('南京南站', '南京', '西安大略')
FROM dual;

translate(str,src,dest)