首页 > 代码库 > SQL_substr函数实验
SQL_substr函数实验
原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。
深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39966251
【格式】
截取函数,可以实现提取字符串中指定的字符数
substr( string, start_position, [ length ] )
string:源字符串
start_position:提取的位置,字符串中第一个位置始终为1
[ length ]:提取的字符数,如果省略,substr将返回整个字符串
【实验】
目标:
体会substr函数的用法
实验思路:
实现将某列上指定字符位数的数据插入到指定的列上
模拟现场需求:
设想稍微复杂一下,我们假定需要将ename列的内容更改为ename1列的内容,但此时ename1列的字段长度超过了ename列的字段要求的最大长度,经过查看发现出现ename1列字段超出ename列字段长度的原因是ename1列数据类型为char(15),而且实际有效数据长度不到7个字符,所以只需要将ename1列的前7位字符全部提取出来插入到ename列即可。这也说明对于定长char类型,当输入字符不足定长时是会用空格进行补位的。
说明:
这种实验想法的出现,其实是映射了实际生产需求中的一个例子。在实际生产环境上,要实现把一个用户的信息某一列的数据抽取到另外一个用户上,但由于两者列的数据类型不同,存在空格致使字段长度超过了另外一个用户要求该列字段的长度,而两者不可以更改数据类型,但是有效的字段数是都符合这两个列的,因此想到使用substr来完成这个操作。
SQL> create table hyl as select * from emp where 1=2;--创建实验表Table createdSQL> select * from hyl;--查询实验表,目前数据为空EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------SQL> alter table hyl add(ename1 char(15));--向实验表中添加实验列ename1,用于模拟长字符字段Table alteredSQL> insert into hyl(ename1) select emp.ename as ename1 from emp;--将emp表的ename列数据以定长字段的数据类型插入到了实验表hyl的ename1列上,此时ename1字段长度为1514 rows insertedSQL> select * from hyl;--查看插入到ename1列上的数据EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ENAME1----- ---------- --------- ----- ----------- --------- --------- ------ --------------- SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER14 rows selectedSQL> select count(1) from hyl t where length(t.ename1)=15;--验证一下,ename1列字段超过10的数据行数 COUNT(1)---------- 14SQL> desc hyl;--查看hyl表的表结构,可以看到ename1列为char(15),ename列为varchar2(10)Name Type Nullable Default Comments -------- ------------ -------- ------- -------- EMPNO NUMBER(4) Y ENAME VARCHAR2(10) Y JOB VARCHAR2(9) Y MGR NUMBER(4) Y HIREDATE DATE Y SAL NUMBER(7,2) Y COMM NUMBER(7,2) Y DEPTNO NUMBER(2) Y ENAME1 CHAR(15) Y SQL> update hyl t set t.ename=t.ename1;--更新ename列为ename1上数据时,报错了如下,提示ename字段长度(10)小于ename1字段长度(15),无法完成数据的更新 update hyl t set t.ename=t.ename1ORA-12899: value too large for column "SCOTT"."HYL"."ENAME" (actual: 15, maximum: 10)SQL> update hyl t set t.ename=substr(t.ename1,1,7);--使用substr函数,只把ename1列的前7个字符的内容更新到ename列上14 rows updatedSQL> select * from hyl;--再次查看hyl表,发现ename列的数据已经成功更新为enam1列上的数据EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ENAME1----- ---------- --------- ----- ----------- --------- --------- ------ --------------- SMITH SMITH ALLEN ALLEN WARD WARD JONES JONES MARTIN MARTIN BLAKE BLAKE CLARK CLARK SCOTT SCOTT KING KING TURNER TURNER ADAMS ADAMS JAMES JAMES FORD FORD MILLER MILLER14 rows selectedSQL> desc hyl;--再次查看hyl表的数据结构,体会如何将ename1列数据类型为char(15)中前7个字符插入到数据类型为varchar2(10)的ename列上去的Name Type Nullable Default Comments -------- ------------ -------- ------- -------- EMPNO NUMBER(4) Y ENAME VARCHAR2(10) Y JOB VARCHAR2(9) Y MGR NUMBER(4) Y HIREDATE DATE Y SAL NUMBER(7,2) Y COMM NUMBER(7,2) Y DEPTNO NUMBER(2) Y ENAME1 CHAR(15) Y
原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。
深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/39966251
SQL_substr函数实验