![](/img/trans.png)
[英]How to update a table with values from multiple selects with the same name?
[英]how to update an table column name from the values in the same table name?
eid | ename | fname midname | lname
--------+-----------------------+-------------+-----------+----------
1 hansen
2 hansen ola
3 dennis richard hog
现在如何将它们更新为这样:
eid | ename | fname midname | lname
--------+-----------------------+-------------+-----------+----------
1 hansen
2 hansen ola hansen ola
3 dennis richsard hog dennis richard hog
只需从表中获取ename
并使用explode(' ', $name)
或str_word_count ($name, 1)
将其分解为名字,中间名和姓氏str_word_count ($name, 1)
然后相应地更新表。
用于选择行的SQL:
SELECT * FROM <tablename>
用于更新行的SQL:
UPDATE <tablename> SET <columnname> = <value> WHERE ename = <ename>
如果名称始终相同,则可以使用str_word_count
: str_word_count ($ result, 1)
来简单地检索数组中字符串的单词。
它有助于您还是您希望我发展?
嗨,请检查下面的SQL代码以获取更新语句。
CREATE TABLE emptble(eid int,ename varchar(200) NULL,fname varchar(50) NULL,midname varchar(25) NULL,lname varchar(100) NULL)
INSERT INTO emptble(eid,ename)
VALUES(1,'hansen'),(2,'hansen ola'),(3,'dennis richard hog')
SELECT ename,
CASE WHEN CHARINDEX(' ',ename,1)>0 then LEFT(ename,CHARINDEX(' ',ename,1)-1) ELSE ename END,
CASE WHEN CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1)>0 THEN LEFT((CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1)-1) ELSE (CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END) END,
CASE WHEN CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1) = 0 THEN NULL ELSE RIGHT(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END,LEN(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END)-CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1)) END
FROM emptble
UPDATE emptble SET fname= CASE WHEN CHARINDEX(' ',ename,1)>0 then LEFT(ename,CHARINDEX(' ',ename,1)-1) ELSE ename END,
midname =CASE WHEN CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1)>0 THEN LEFT((CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1)-1) ELSE (CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END) END,
lname=CASE WHEN CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1) = 0 THEN NULL ELSE RIGHT(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END,LEN(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END)-CHARINDEX(' ',(CASE WHEN CHARINDEX(' ',ename,1) = 0 then NULL ELSE RIGHT(ename,len(ename)-CHARINDEX(' ',ename,1)) END),1)) END
SELECT * FROM emptble
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.