MySQL, ajoutez la colonne 'FullNameReverseOrder' avec les données de la colonne fullname et remplacez (FName, LName) par (LName, FName)
P粉948258958
P粉948258958 2023-08-17 17:32:04
0
1
560
<p>Je souhaite ajouter une nouvelle colonne nommée FullNameReverseOrder à une table nommée NameTable, où les informations de FullName sont classées dans l'ordre de FirstName LastName, et FullNameReverseOrder sera enregistré dans l'ordre de LastName FirstName. </p> <p>Voici un tableau que vous pouvez utiliser : </p> <pre class="brush:php;toolbar:false;">créer une table NameTable (ID int, FullName varchar(100), age int, clé primaire (ID)); insérer dans NameTable (ID, FullName, age) des valeurs (1, 'ben thompson', 23); Ajoutez une nouvelle colonne nommée FullNameReverseOrder : modifier la table NameTable ajouter la colonne FullNameReverseOrder varchar(100) ...je ne sais pas quoi faire ici... après FullName;</pre> <p><br /></p>
P粉948258958
P粉948258958

répondre à tous(1)
P粉301523298

Quelques points à considérer.

  • Ne stockez pas l'âge car il change chaque année et le tableau doit être mis à jour pour utiliser la date de naissance à la place.
  • Si disponible, utilisez des colonnes séparées pour stocker les prénom, nom et deuxième prénom.

Basé sur la question

Considérez l'exemple de données suivant où FullNameles colonnes comprennent jusqu'à trois mots séparés par des espaces

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);

Requête,

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;

Résultats,

LastName    FirstName   MiddleName
Thompson      Ben   
King          Martin      Luther

Apportez d'abord des modifications en modifiant la structure de la table. S'il y a un grand nombre de transactions, je recommande de verrouiller la table de manière appropriée

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

Pour mettre à jour les colonnes nouvellement ajoutées LastName, MiddleName et FirstName, utilisez la commande suivante :

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) );

Choisissez,

select * 
from NameTable;

Résultats

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

Maintenant, si vous souhaitez que ce processus se déroule automatiquement, pensez à créer un déclencheur.

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;

Insérer la valeur de test

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

select * from NameTable;

Résultats

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

Voir l'exemple

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal