zoukankan      html  css  js  c++  java
  • 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 created
    
    SQL> select * from hyl;
    --查询实验表,眼下数据为空
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
    
    SQL> alter table hyl add(ename1 char(15));
    --向实验表中加入实验列ename1,用于模拟长字符字段
    Table altered
    
    SQL> insert into hyl(ename1) select emp.ename as ename1 from emp;
    --将emp表的ename列数据以定长字段的数据类型插入到了实验表hyl的ename1列上,此时ename1字段长度为15
    14 rows inserted
    
    SQL> 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
                                                                            MILLER
    14 rows selected
    
    SQL> select count(1) from hyl t where length(t.ename1)=15;
    --验证一下,ename1列字段超过10的数据行数
      COUNT(1)
    ----------
            14
    
    SQL> 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.ename1
    ORA-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 updated
    
    SQL> 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                                                            MILLER
    14 rows selected
    
    SQL> 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

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    print(end=" ") 滚动输出到屏幕
    写入到csv文件的两种方式(pd.DaaFrame 和 csv.writerow)
    pytorch 损失函数(nn.BCELoss 和 nn.CrossEntropyLoss)(思考多标签分类问题)
    pytorch实战(二)hw2——预测收入是否高于50000,分类问题
    信用卡新颖的攻击方式,黑客可非接触式卡进行交易
    微软结束对SolarWinds黑客的内部调查
    Apple M1芯片首款恶意软件曝光
    新的Office恶意软件,黑客可远程窃取信息
    如何审核Active Directory中的密码更改
    特斯拉恶意软件使用新的传送和规避技术
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4754368.html
Copyright © 2011-2022 走看看