源码-Oracle数据库管理-第十一章-Oracle内置函数-Part 2(字符型函数)

这部分的translate, start with...connect by prior, trim很新鲜,也有不好理解的地方。

--TBC 2016/10/22 
--11.2.4 字符串处理函数
--1. 使用CONCAT函数合并字符串
SELECT CONCAT(CONCAT(ename, ' 的工作种类是:'), job) as "职别"
  FROM emp
 WHERE deptno = 20;

--转换成||操作符的语法:
SELECT ename || ' 的工作种类是:' || job as "职别"
  FROM emp
 WHERE deptno = 20;


--2. 使用SUBSTR进行字符截取
SELECT SUBSTR('ABCDEFG', 3, 4) "子串" FROM DUAL;
--指定负数参数
SELECT SUBSTR('ABCDEFG', -5, 4) "子串" FROM DUAL;

--SUBSTR在PL/SQL中的示例
DECLARE
   v_str VARCHAR2(20):='Thisisastring';
BEGIN
   DBMS_OUTPUT.PUT_LINE('SUBSTR(v_str,5,2):'||SUBSTR(v_str,5,2));
   DBMS_OUTPUT.PUT_LINE('SUBSTR(v_str,-5,2):'||SUBSTR(v_str,-5,2)); 
   DBMS_OUTPUT.PUT_LINE('SUBSTR(v_str,5,-2):'||SUBSTR(v_str,5,-2));      
   DBMS_OUTPUT.PUT_LINE('SUBSTR(v_str,5.23,2.34):'||SUBSTR(v_str,5.23,2.43));        
END;  


--3.使用LENGTH获取字符串长度
SELECT ename,LENGTH(ename) FROM emp WHERE deptno=20;


--4. 使用INSTR查找字串
SELECT INSTR('Oracle是一个关系型数据库系统,是一个数据库管理工具', '数据库') as "位置"
  FROM DUAL;

--INSTR,指定开始位置和出现的次数
SELECT INSTR('Oracle是一个关系型数据库系统,是一个数据库管理工具',
             '数据库',
             6,
             2) as "位置"
  FROM DUAL;


--从右向左查询的示例
SELECT INSTR('Oracle是一个关系型数据库系统,是一个数据库管理工具',
             '数据库',
             -3,
             1) as "位置"
  FROM DUAL;


--5. 使用LPAD和RPAD填充字符串
SELECT RPAD(ename, 30, '.') as "右侧填充", 
       LPAD(sal, 8, '*') as "左侧填充"
  FROM emp
 WHERE deptno = 20;


--使用LPAD添加层次
--这个有点意思,但也不太好理解
SELECT LPAD('*', 2 * LEVEL - 1, '+') as "层次", LEVEL, ename
  FROM emp
 START WITH empno = 8091
CONNECT BY PRIOR mgr = empno;

select * from emp for update;


--6. 使用TRIM删除字符串2边的空白
SELECT TRIM('  This is a test ') as "简单TRIM语法" FROM dual;

--使用TRIM的各种参数实现截除
SELECT TRIM(LEADING FROM '  This is a test ') as "LEADING",
       TRIM(TRAILING FROM '  This is a test ') as "TRAILING",
       TRIM(BOTH FROM '  This is a test ') as "BOTH"
  FROM dual;

--使用字符截除功能
--这个挺有用
SELECT TRIM('a' FROM 'aaaSCHOOLaaa') as "清除首尾字母a",
       TRIM(LEADING 'a' FROM 'aaaSEARCHaaa') as "清除首部字母"
  FROM dual;

--使用LTRIM和RTRIM进行多字符截除
SELECT LTRIM('isYour nameisis', 'is') as "LTRIM",
       RTRIM('isYour nameisis', 'is') as "RTRIM",
       LTRIM(RTRIM('isYour nameisis', 'is'), 'is') as "RTRIM和LTRIM"
  FROM dual;



--使用REPLACE函数进行字符串替代
SELECT REPLACE('我有一帘幽梦', '一帘', '一地') as "指定替换字符",
       REPLACE('我有一帘幽梦', '一帘') as "未指定替换字符"
  FROM dual;

--使用TRANSLATE函数进行字符串替代

SELECT TRANSLATE('1tech23', '123', '456') as "替换1",
       TRANSLATE('222tech', '2ec', '3it') as "替换2"
  FROM dual;


--这部分不是很好理解
SELECT TRANSLATE('1tech23', 'My1tech23', 'Oracle') as "替换1",
       TRANSLATE('222tech', 'This222tech', 'Oracle') as "替换2"
  FROM dual;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值