代码之家  ›  专栏  ›  技术社区  ›  zhuzhi

将标记化字符串从表插入到其他表[已关闭]

  •  -5
  • zhuzhi  · 技术社区  · 6 年前

    写下SQL语句,按照以下准则将学生表数据插入MM\U Student:

    全名 is由三个名称分区组成,以便

    名字: 第一个空格字符前全名左侧的第一个单词

    中间名: 全名左侧的第二个和第三个单词(如果存在)

    家庭名称: 全名的最后一个字始终被命名为家族或姓氏。

    每个名字都必须包含姓氏。

    create table Student
    (StuId CHAR(9),
    FullName VARCHAR2(30) NOT NULL,
    Address VARCHAR2(20),
    City VARCHAR2(15),
    PostalCode VARCHAR2(6),
    Constraint PK_Stuid PRIMARY KEY (StuId)
    );
    
    
    
    create table MM_Student
    (StuId CHAR(9),
    FirstName VARCHAR2(10) NOT NULL,
    MiddleName VARCHAR2(20),
    FamilyName VARCHAR2(10) NOT NULL,
    Address VARCHAR2(20),
    City VARCHAR2(15),
    PostalCode VARCHAR2(5),
    Constraint PK_Stuid PRIMARY KEY (StuId)
    );
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Littlefoot    6 年前

    如果全名总是由3个部分组成(正如您所说的),那么它相对简单,使用 REGEXP_SUBSTR 正则表达式函数:

    SQL> with test (fullname) as
      2    (select 'Metro Goldwyn Mayer' from dual
      3    )
      4  select regexp_substr(fullname, '\w+', 1, 1) first_name,
      5         regexp_substr(fullname, '\w+', 1, 2) middle_name,
      6         regexp_substr(fullname, '\w+', 1, 3) last_name
      7  from test;
    
    FIRST_NAME           MIDDLE_NAME          LAST_NAME
    -------------------- -------------------- --------------------
    Metro                Goldwyn              Mayer
    
    SQL>
    

    使用 经典 SUBSTR + INSTR 组合,但-这不是 漂亮的 解决方案:

    SQL> with test (fullname) as
      2    (select 'Metro Goldwyn Mayer' from dual
      3    )
      4  select substr(fullname, 1, instr(fullname, ' ', 1, 1) - 1) first_name,
      5         substr(fullname,
      6                instr(fullname, ' ', 1, 1) + 1,
      7                instr(fullname, ' ', 1, 2) - instr(fullname, ' ', 1, 1) - 1) middle_name,
      8         substr(fullname,
      9                instr(fullname, ' ', 1, 2) + 1) last_name
     10  from test;
    
    FIRST_NAME           MIDDLE_NAME          LAST_NAME
    -------------------- -------------------- --------------------
    Metro                Goldwyn              Mayer
    
    SQL>
    

    这是你任务的第一部分;自己编写INSERT语句。如果您无法使其工作,请编辑您的初始消息,提供您设法工作的代码,解释问题所在,并有人会提供帮助。