recherche

Maison  >  Questions et réponses  >  le corps du texte

MySQL, ajoutez la colonne 'FullNameReverseOrder' avec les données de la colonne fullname et remplacez (FName, LName) par (LName, FName)

<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粉948258958P粉948258958475 Il y a quelques jours536

répondre à tous(1)je répondrai

  • P粉301523298

    P粉3015232982023-08-18 13:51:58

    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

    répondre
    0
  • Annulerrépondre