Oracle函數(shù)之字符函數(shù)


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的字符串
  • 說明:
  1. 如果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
  2. 如果src比dest長,那么src中比dest長的字符,也就是在dest沒有對應(yīng)字符的內(nèi)容,會被刪除
    例如TRANSLATE('南京南站', '南京站', '西安'),src中的“站”在dest中沒有對應(yīng)字符,則src中的“站”會被刪除
  3. 如果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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容