SQL-常用函数-第三集-字符函数

31次阅读

共计 1738 个字符,预计需要花费 5 分钟才能阅读完成。

看完这章你会掌握以下内容

  • INSTR 和 SUBSTR 经典组合套用场景
  • TRIM,LTRIM,RTRIM 不带参数和带参数的区别
  • Replace 函数替换不存在的字符,是否报错
    • *

INSTR 函数语法 (C1,C2,I,J)
在一个字符串中搜索指定的字符, 返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置, 默认为 1,可正可负(正向逆向)
J 出现的位置, 默认为 1
SQL> select instr(“abcde”,’b’); 结果是 2,即在字符串“abcde”里面,字符串“b”出现在第 2 个位置。如果没有找到,则返回 0;不可能返回负数

SBUSTR(str,pos);
就是从 pos 开始的位置,一直截取到最后。还有一种比较常用的是:

SUBSTR(str,pos,len);
这种表示的意思是,就是从 pos 开始的位置,截取 len 个字符(空白也算字符),pos 默认为 1。


经典练习题 1:

从字符串中 ’1#qfq#3df#520#d234#dlaj#’ 查找 第 3 个 #号和第 4 个#号之间的字符串

两个函数的嵌套使用,Substr 和 Instr
Substr 截取字符
Instr 查找字符所在位置,返回位置数值。

SUBSTR('1#qfq#3df#520#d234#dlaj#', 起始位置, 截取长度)
INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)+1  -- 起始位置
INSTR('1#qfq#3df#520#d234#dlaj#','#',1,4)-INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)-1 -- 截取长度


SELECT SUBSTR('1#qfq#3df#520#d234#dlaj#',
              INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)+1, 
              INSTR('1#qfq#3df#520#d234#dlaj#','#',1,4)-
              INSTR('1#qfq#3df#520#d234#dlaj#','#',1,3)-1) 
  FROM dual;


经典练习题 2:
从字符串中 ’dfas#dffr#saf#fdad#fsfa#ds#dfa’ 查找最后一个 # 号后面的字符串

select substr('dfas#dffr#saf#fdad#fsfa#ds#dfa',Instr('dfas#dffr#saf#fdad#fsfa#ds#dfa','#',-1,1)+1 )from dual
select instr('ds#as#dfa','#',-1,1) from dual;  -- 计数位置方向始终从左往右
select substr('ds#as#dfa',6) FROM DUAL;


LTrim,Trim,RTrim 函数本身有两种用法,一是不带参数,二是带参数。

-- TRIM 函数的基本用法:SELECT TRIM('AS'),LTRIM('AS'),RTRIM('AS') FROM DUAL;
SELECT TRIM('A S')FROM DUAL;
  1. 不带截取参数,就是截取字符串里的空格。

  1. 如果 字符中间出现空格,则不能清除。

如果带截取参数的则要注意以下几项:|
1. 区分大小写,如果不一致,则无法截取。
2. 截取参数并不是按照既定有的顺序进行截取,而是截取到参数里没有出现的字符串才停止

例如:以下第三行例子,一直截取到没有出现任意一个截取参数为止。ABC 之后还有一长段的 C 都满足截取字段的条件,直到出现了第一个不是的字符串 D,则往后的才保留下来。

SELECT LTRIM('abcddee','abc') FROM DUAL;   ---  返回 ddee
SELECT LTRIM('abcddee','ABC') FROM DUAL;   ---  返回 abcddee
SELECT LTRIM('ABCCCCDDEE','ABC') FROM DUAL;   ---- 返回 DDEE
SELECT LTRIM('ACDCCCCBDE','ABC') FROM DUAL;    ---- 返回 DCCCCCBDE


3.Replace 函数,如果出现需 要替换的字符不在原来的字符串 里,直接运行,不会报错

SELECT REPLACE(REPLACE('a 你好 djl','a','3'),'b','4') FROM dual;

发布于 05-30

正文完
 0