Oracle函数之字符函数


1. 拼接字符串函数concat(str1,str2)

  • 功能:拼接两个字符串
  • 参数:str1,str2 字符串(数值会自动转换),只能有2个参数
  • 返回:str1和str2拼接在一起的字符串

SQL和执行结果:

SELECT CONCAT(123, 'abc'),
       CONCAT('abc', 'def'),
       123 || 'ghi' || 'jkl' || 'mno'
  FROM dual;
concat(c1,c2) , ||

类似的:还可以用||连接字符串,concat(str1,str2)str1||str2都能拼接字符串
不同的是,concat()函数只能拼接2个字符串,||可以连接多个字符串


2. 查找字符串位置instr(str1,str2[,pos][,nth])

  • 功能:在str1中查找str2的位置
  • 参数:
    str1,str2 字符串,
    pos:数值型参数,表示从第pos个字符的位置开始查找,默认值为1,表示从第1个字符开始查找
    nth:数值型参数,表示第nth次出现,默认值为1,表示第1次出现str2
  • 返回:按条件查找到的str2在str1中的位置,即str2从str1的第几位开始(汉字算作1个字符),若找不到则返回0

SQL和执行结果:

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])

类似的函数有instrb(str1,str2[,pos][,nth]),区别在于汉字/全角字符算2个字符


3. 计算字符串长度length(str1)

  • 功能:计算字符串str1的长度
  • 参数:str1 字符串
  • 返回:字符串str1的长度,汉字算作1个字符

SQL和执行结果:
SELECT LENGTH('一二三123abc') FROM dual;

length(str1)

类似的函数有lengthb(str1),汉字/全角字符算2个字符
其他如lengthc(),length2(),length4()较少使用


4. 字符补到指定长度

4.1 左侧补位函数lpad(str1,len[,pad])

  • 功能:在str1左侧用pad字符补位到整个字符串长度为len
  • 参数:str1 字符串,len 数值,pad 字符串
  • 返回:在str1基础上,用pad补位到len长度的字符串

4.2 右侧补位函数rpad(str1,len[,pad])

  • 功能:在str1右侧用pad字符补位到整个字符串长度为len
  • 参数:str1 字符串,len 数值,pad 字符串(不填默认用空格填充)
  • 返回:在str1基础上,用pad补位到len长度的字符串

SQL和执行结果:

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 删除左侧字符串ltrim(str1[,tset])

  • 功能:从str1左侧第一位开始删除tset字符,直到遇到第一个非tset字符
  • 参数:str1 字符串,tset 字符串(不写则默认为空格)
  • 返回:在str1基础上,删除左侧tset字符后的字符串
  • 过程:以tset字符串的每一个字符为一个外循环,以str1的每一个字符为内循环,从str1左侧开始匹配,当前循环的字符相同则从str1中删除该字符,否则跳出当前循环

SQL和执行结果:

SELECT LTRIM('   ffff7777ebd'),
       LTRIM('   ffff7777ebd', ' '),
       LTRIM('   ffff7777ebd', ' ebd'),
       LTRIM('   ffff7777ebd', ' f'),
       LTRIM('   ffff7777ebd', ' f7'),
       LTRIM('   ffff7777ebd', ' f7ebd')
  FROM dual;
ltrim(str1[,tset])

5.2 删除右侧字符rtrim(str1[,tset])

  • 功能:从str1右侧第一位开始删除tset字符,直到遇到第一个非tset字符
  • 参数:str1 字符串,tset 字符串
  • 返回:在str1基础上,删除右侧tset字符后的字符串
  • 过程:以tset字符串的每一个字符为一个外循环,以str1的每一个字符为内循环,从str1右侧开始匹配,当前循环的字符相同则从str1中删除该字符,否则跳出当前循环

SQL和执行结果:

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 删除两侧字符trim(c1 from str2)

  • 功能:从str2字符串两侧同时删除c1字符
  • 参数:
    c1 字符串型,只能1位长度,可以是空格或任意字符,汉字算1个字符,默认为空格
    str2 字符串型,任意字符串
  • 返回:在str2基础上,删除两侧c1字符后的字符串

SQL和执行结果:

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
  • 参数:
    src-str 字符串型,原字符串,
    old-str 字符串型,希望替换掉的字符串
    new-str 字符串型,用来替换old-str,如无new-str,则直接删除old-str
  • 返回:在src-str中,用new-str替换old-str后的字符串

SQL和执行结果:
select replace('南京南站南','南') , replace('南京南站南','南','北'),replace('南京南站南','南京','北京') from dual;

replace(src-str,old-str[,new-str])


7. 截取字符串substr(str,pos[,len])

  • 功能:在str字符串中,从pos位置开始截取字符串(汉字/全角字符,算1个字符),
  • 参数:
    str 字符串型,截取前的字符串,
    pos 数值型,从左侧第pos位开始截取字符串,如果为小数则截取整数部分,如果为负数则从右侧开始计数
    len 数值型,可选参数,表示截取长度为len的字符串,不写则默认截取到str字符串末尾的所有字符。如果len的值≤0,则返回空白字符串
  • 返回:从str中第pos位开始截取的长度为len的字符串

SQL和执行结果:

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])
功能和参数:和substr()函数一样
区别:汉字/全角字符算2个字符


8. 替换对应字符串translate(str,src,dest)

  • 功能:把str字符串中,src字符串一一对应替换成dest字符串
  • 参数:
    str 字符串型,替换前的字符串
    src 字符串型,替换掉的字符串src
    dest 字符串型,用于替换src字符串的字符串
  • 返回:从str中第pos位开始截取的长度为len的字符串
  • 说明:
  1. 如果src和dest字符串长度相同,则将src和dest所有字符依次一一对应的方式替换,
    例如TRANSLATE('aabb', 'ab', 'AZ'),把所有a对应替换为A,所有b对应替换为Z
    特别的,如果出现重复字符并且对应不同内容,后出现的对应字符会被忽略,
    例如TRANSLATE('1122', '112', '345'),1对应3,第二个1对应4会被忽略,2对应5
  2. 如果src比dest长,那么src中比dest长的字符,也就是在dest没有对应字符的内容,会被删除
    例如TRANSLATE('南京南站', '南京站', '西安'),src中的“站”在dest中没有对应字符,则src中的“站”会被删除
  3. 如果src比dest短,则dest中多余的字符会被忽略
    例如TRANSLATE('南京南站', '南京', '西安大略'),src的“南京”,会被替换为dest的“西安”,dest的“大略”会被忽略

SQL和执行结果:

SELECT TRANSLATE('aabb', 'ab', 'AZ'),
       TRANSLATE('1122', '112', '345'),
       TRANSLATE('南京南站', '南京站', '西安'),
       TRANSLATE('南京南站', '南京', '西安大略')
  FROM dual;
translate(str,src,dest)

你可能感兴趣的:(Oracle函数之字符函数)