MySQL, Spalte „FullNameReverseOrder' mit Daten aus der Spalte „Fullname' hinzufügen und (FName, LName) in (LName, FName) ändern.
P粉948258958
P粉948258958 2023-08-17 17:32:04
0
1
529
<p>Ich möchte einer Tabelle mit dem Namen NameTable eine neue Spalte mit dem Namen „FullNameReverseOrder“ hinzufügen, in der die Informationen von „FullName“ in der Reihenfolge „Vorname Nachname“ angeordnet sind und die „FullNameReverseOrder“ in der Reihenfolge „Nachname Vorname“ gespeichert wird. </p> <p>Hier ist eine Tabelle, die Sie verwenden können: </p> <pre class="brush:php;toolbar:false;">Tabelle erstellen NameTable (ID int, FullName varchar(100), age int, Primary Key(ID)); insert into NameTable (ID, FullName, age) value(1, 'ben thompson', 23); Fügen Sie eine neue Spalte mit dem Namen FullNameReverseOrder hinzu: Tabelle ändern NameTable Spalte hinzufügen FullNameReverseOrder varchar(100) ...weiß nicht, was ich hier tun soll... nach FullName;</pre> <p><br /></p>
P粉948258958
P粉948258958

Antworte allen(1)
P粉301523298

需要考虑的一些要点。

  • 不要存储年龄,因为每年都会变化,表格需要更新,改用出生日期。
  • 如果有的话,使用单独的列来存储名字、姓氏和中间名。

根据问题

考虑以下数据示例,其中FullName列最多由三个用空格分隔的单词组成

create table NameTable (
  ID int, 
  FullName varchar(100), 
  age int, 
  primary key(ID) );

insert into NameTable (ID, FullName, age) values
  (1, 'ben thompson', 23),
  (2, 'Martin Luther King', 23);

查询,

SELECT SUBSTRING_INDEX(TRIM(FullName), ' ', -1) LastName,
       SUBSTRING_INDEX(TRIM(FullName), ' ', 1) FirstName,
       SUBSTR(FullName, LOCATE(' ',FullName) + 1,  (CHAR_LENGTH(FullName) - LOCATE(' ',REVERSE(FullName)) - LOCATE(' ',FullName)))  AS MiddleName   
FROM NameTable;

结果,

LastName    FirstName   MiddleName
Thompson      Ben   
King          Martin      Luther

首先通过修改表结构来进行更改,如果有大量的事务,我建议适当锁定表

SET autocommit=0; 
LOCK TABLES NameTable WRITE; 
alter table NameTable add column FullNameReverseOrder varchar(100) after FullName;
COMMIT; 
UNLOCK TABLES;

要更新新添加的列LastName,MiddleName和FirstName,请使用以下命令:

update NameTable
set FullNameReverseOrder = concat_ws(' ' ,SUBSTRING_INDEX(TRIM(FullName), ' ', -1),
                                  SUBSTR(FullName, LOCATE(' ',FullName)+1,  (CHAR_LENGTH(FullName) - LOCATE(' ',REVERSE(FullName)) - LOCATE(' ',FullName))),
                                  SUBSTRING_INDEX(TRIM(FullName), ' ', 1) );

选择,

select * 
from NameTable;

结果

ID  FullName             FullNameReverseOrder      age
1   ben thompson          thompson  ben            23
2   Martin Luther King    King Luther Martin       23

现在,如果您希望该过程自动进行,请考虑创建一个触发器。

CREATE TRIGGER FullNameReverseOrderUpdate BEFORE INSERT ON NameTable
FOR EACH ROW BEGIN

SET new.FullNameReverseOrder = (concat_ws(' ' ,SUBSTRING_INDEX(TRIM(new.FullName), ' ', -1),
                                  SUBSTR(new.FullName, LOCATE(' ',new.FullName)+1,  (CHAR_LENGTH(new.FullName) - LOCATE(' ',REVERSE(new.FullName)) - LOCATE(' ',new.FullName))),SUBSTRING_INDEX(TRIM(new.FullName), ' ', 1) ));
END;

插入测试值

insert into NameTable (ID, FullName, age) values
  (3, 'Arthur  Thompson', 23);

select * from NameTable;

结果

ID  FullName             FullNameReverseOrder     age
1   ben thompson           thompson  ben           23
2   Martin Luther King     King Luther Martin      23
3   Arthur  Thompson       Thompson  Arthur        23

查看示例

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage