zoukankan      html  css  js  c++  java
  • Oracle 字符串截取、替换

    字符串截取

    substr 函数:截取字符串

    语法:substr(string, start, [length])

    解释:

    • String:源字符串
    • start:开始位置,从0或1开始查找,如果start是负数,则从string字符串末尾开始算起
    • length:可选项,表示字符串的长度
    --截取所有字符串,返回'Hello ghostwolf1'
    SELECT SUBSTR('Hello ghostwolf1', 0) NAME FROM DUAL;
    --截取所有字符串,返回'Hello ghostwolf1'
    SELECT SUBSTR('Hello ghostwolf1', 1) NAME FROM DUAL;
    --从第7个字符串开始截取,返回‘ghostwolf1’
    SELECT SUBSTR('Hello ghostwolf1', 7) NAME FROM DUAL;
    --从倒数第10个字符开始,截取到末尾,返回‘ghostwolf1’
    SELECT SUBSTR('Hello ghostwolf1', -10) NAME FROM DUAL;
    --从第7个字符开始,截取17个字符。返回'ghostwolf1'
    SELECT SUBSTR('Hello ghostwolf1', 7, 17) NAME FROM DUAL;
    --从倒数第4个字符开始,截取3个字符,返回‘ghostwolf1’
    SELECT SUBSTR('Hello ghostwolf1', -10, 10) NAME FROM DUAL;
    
    

    instr 函数:查找字符串位置

    语法:instr(String, subString, position, ocurrence)

    解释:

    • String:源字符串
    • subString:要查找的子字符串
    • position:开始的位置,默认从1开始。如果为负数,则从右向左检索
    • ocurrence:可选项,表示子字符串第几次出现在源字符串当中,默认第1次,负数则报错。
    --表示从源字符串'city_company_staff'中第1个字符开始查找子字符串'_'第1次出现的位置,返回5
    SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_') NAME FROM dual ;   
     
    --表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置,返回5
    SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', 5) NAME FROM dual;    
     
    --表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置,返回5
    SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', 5, 1) NAME FROM dual;    
     
    --表示从源字符串'city_company_staff'中第3个字符开始查找子字符串'_'第2次出现的位置,返回13
    SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', 3, 2) NAME FROM dual ;  
     
    --start参数为-1,从右向左检索,查找'_'字符串在源字符串中第1次出现的位置,返回13
    SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', -1, 1) NAME FROM dual ;   
     
    --start参数为-6,从右向左检索,查找'_'字符串在源字符串中第2次出现的位置,返回5
    SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', -6, 2) NAME FROM dual  ;  
    

    字符串拼接

    “||” 拼接

    这个相当于java里面的 “+” 号

    SELECT origin_code||'000000' CODE FROM t_origin t WHERE t.leaf='0' AND t.origin_code LIKE '44%00';
    
    

    输出结果:

    concat() 函数

    采用CONCAT进行连接,CONCAT()只允许两个参数;换言之,一次只能将两个字串串连起来(如果需要拼接多个字符串,可以进行嵌套)

    SELECT CONCAT(origin_code,'000000')  CODE,t.* FROM t_origin t WHERE t.leaf='0' AND t.origin_code LIKE '44%00';
    
    

    输出结果:

    字符串替换

    replace(char, str1, str2):把 char 中 str1 字符串替换为 str2 字符串

    -- 将‘123456’中的‘456’替换成‘123’, 返回‘123123’
    select replace('123456','456','123') name from dual; 
    

    replace(char, str1):把char 中的 str1 字符串移除

    -- 将‘123456’中的‘456’替换掉。返回‘123’
    select replace('123456','456') name from dual;
    

    regexp_replace(cstr_sourcear, pattern_str, rep_str):支持正则表达式,用法类似于 replace,但功能更强大

    -- 将‘12345654321’中的‘2’替换成‘*’,返回‘1*34566543*1’
    select regexp_replace('123456654321','2','*') name from dual; 
    
    --将‘12345654321’中的‘[26]’替换成‘*’,返回‘1*345**543*1’
    select regexp_replace('123456654321','[26]','*') name from dual; 
    

    regexp_replace(str_source, pattern_str):把 str_source中的 pattern_str 字符串剔除

    --将‘12345654321’中的‘[26]’替换掉,返回‘13455431’
    select regexp_replace('123456654321','[26]') name from dual; 
    

    translate(str_source, char1, char2):以字符为单位,把 str_source 中的 chr1 字符对应替换为 chr2。如果 chr1 比chr2 长,那么在 chr1 中而不在 chr2 中的字符将被剔除,因为没有对应的替换字符。需注意 chr2 不能为 null 或'',否则返回值也为空

    --用字符'A'、'B'、'C'对应替换'a','b','c'字符;
    select translate('abcc123a','abc','ABC') name from dual;
    
    --'abc'长度为 3,'AB'长度为 2,字符'c'没有对应的字符来替换,因此被剔除掉;  
    select translate('abcc123a','abc','AB') name from dual; 
    
    --剔除掉字符'a'、'b'、'c',translate 有 # 的特殊用法,以 # 开头的表示所有字符。
    select translate('abcc123a','#abc','#') name from dual; 
    
    --先把数字筛选出来,然后用筛选出来的字符串取筛选原来的字符串,结果‘234’
    select translate('阿2萨德桑的3股份的4观点','#'||translate('阿2萨德桑的3股份的4观点', '#0123456789', '#'),'#') as col from dual;
    
  • 相关阅读:
    while循环和do while循环的基本使用和区别
    less框架简介
    css关联选择器大致类型总结
    渐进增强和优雅降级
    行,行内元素与块级元素有什么不同?
    for循环的大概遍历运用
    JDBC连接mysql数据库并进行简单操作
    Java实现杨辉三角
    replaceAll() 方法
    java抽象类和接口的区别
  • 原文地址:https://www.cnblogs.com/ghostwolf1/p/14069706.html
Copyright © 2011-2022 走看看