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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容