我有一个包含NAME列的员工数据库表
在NAME字段中,我们有这样的员工姓名 - >李明(艾伦)
这是真正的名字,并且在()
中有英文昵称我想知道我是否可以在SQL UPDATE查询中交换它
FROM:李明(艾伦):艾伦(李明)
我之所以这样,是因为用户想让它按昵称
对此列进行排序答案 0 :(得分:1)
试试这个
UPDATE Employee
SET NAME =
SUBSTRING(name,CHARINDEX('(',name)+1,(CHARINDEX(')',name)-CHARINDEX('(',name)-1))+
' ('+SUBSTRING(name,1,CHARINDEX('(',name)-1)+')'
FROM Employee
答案 1 :(得分:0)
如果我是你,我会为名字和昵称创建单独的colums。尝试获取字符串部分可以防止sql server使用可能真正重要的索引,从性能角度来看。
所以基本上有两种选择:
希望它有所帮助!
答案 2 :(得分:0)
我曾经参与过多个项目,并且我已经按照我的方式完成了以下3个步骤中更新的相同问题:
1)创建包含ID或Name字段的表,并将值插入表
2)使用不同的函数修剪值,并将最终值插入到不同的表中。
3)使用新值
更新旧表我不是说这是做事的唯一方法,但也可能有其他方法。
Create table #Employee(
EmployeeName varchar(200)
)
Insert into #Employee
Select 'LI-MING (ALLEN)' union all
Select 'Jio-Kio (Smith)'
Select
substring(employeename,1,patindex('%(%',employeename)-1),
--Len(substring(employeename,1,patindex('%(%',employeename)-1)),
Right(employeename,len(employeename)-(len(substring(employeename,1,patindex('%(%',employeename)))))
from #Employee
Create table #EmployeeNew(
Employeename1 varchar(200),
Employeename2 varchar(200)
)
Insert into #EmployeeNew(Employeename1, Employeename2)
Select
ltrim(rtrim(substring(employeename,1,patindex('%(%',employeename)-1))),
ltrim(rtrim(Right(Employeename,charindex('(',employeename,1)-3)))
from #Employee
Select * from #Employee
Select * from #EmployeeNew
Select cast('('+Employeename1+')'+left(employeename2,len(employeename2)-1) as varchar(200)) from #EmployeeNew
Update e
Set e.EmployeeName = cast('('+e1.Employeename1+')'+left(e1.employeename2,len(e1.employeename2)-1) as varchar(200))
from #Employee e
left outer join #EmployeeNew e1 on ltrim(rtrim(substring(e.employeename,1,patindex('%(%',e.employeename)-1))) =e1.Employeename1