MySQL, tambah lajur 'FullNameReverseOrder' dengan data dari lajur nama penuh dan tukar (FName, LName) kepada (LName, FName)
P粉948258958
P粉948258958 2023-08-17 17:32:04
0
1
511
<p>Saya ingin menambah lajur baharu bernama FullNameReverseOrder pada jadual bernama NameTable, di mana maklumat FullName disusun dalam susunan FirstName LastName dan FullNameReverseOrder akan disimpan dalam susunan LastName FirstName. </p> <p>Berikut ialah jadual yang boleh anda gunakan: </p> <pre class="brush:php;toolbar:false;">buat jadual NameTable (ID int, FullName varchar(100), age int, primary key(ID)); masukkan ke dalam NameTable (ID, Nama Penuh, umur) nilai(1, 'ben thompson', 23); Tambahkan lajur baharu bernama FullNameReverseOrder: ubah jadual NameTable tambah lajur FullNameReverseOrder varchar(100) ...tidak tahu apa yang perlu dilakukan di sini... selepas Nama Penuh;</pre> <p><br /></p>
P粉948258958
P粉948258958

membalas semua(1)
P粉301523298

Beberapa perkara yang perlu dipertimbangkan.

  • Jangan simpan umur kerana ia berubah setiap tahun dan jadual perlu dikemas kini untuk menggunakan tarikh lahir sebaliknya.
  • Jika tersedia, gunakan lajur yang berasingan untuk menyimpan nama pertama, akhir dan nama tengah.

Berdasarkan soalan

Pertimbangkan contoh data berikut di mana FullNamelajur terdiri daripada sehingga tiga perkataan yang dipisahkan oleh ruang

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

Pertanyaan,

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;

Keputusan,

LastName    FirstName   MiddleName
Thompson      Ben   
King          Martin      Luther

Mula-mula buat perubahan dengan mengubah suai struktur jadual Jika terdapat banyak urus niaga, saya cadangkan untuk mengunci jadual dengan sewajarnya

SET autocommit=0; 
LOCK TABLES NameTable WRITE; 
alter table NameTable add column FullNameReverseOrder varchar(100) after FullName;
COMMIT; 
UNLOCK TABLES;
Untuk mengemas kini lajur yang baru ditambah Nama Akhir, Nama Tengah dan Nama Pertama, gunakan arahan berikut:

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

select * 
from NameTable;
Hasilnya

ID  FullName             FullNameReverseOrder      age
1   ben thompson          thompson  ben            23
2   Martin Luther King    King Luther Martin       23
Sekarang, jika anda mahu proses ini berlaku secara automatik, pertimbangkan untuk mencipta pencetus.

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;
Masukkan nilai ujian

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

select * from NameTable;
Hasilnya

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

Lihat contoh

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!