僱員數據庫表 - > LI-MING(ALLEN)
這是有真正的名字和()
有英文暱稱我想知道如果我能在一個SQL UPDATE查詢
各地交換這樣的:LI-MING(阿倫)TO:ALLEN(LI-MING )
我之所以想這樣做的原因是用戶希望讓它按暱稱排序此列
僱員數據庫表 - > LI-MING(ALLEN)
這是有真正的名字和()
有英文暱稱我想知道如果我能在一個SQL UPDATE查詢
各地交換這樣的:LI-MING(阿倫)TO:ALLEN(LI-MING )
我之所以想這樣做的原因是用戶希望讓它按暱稱排序此列
試試這個
UPDATE Employee
SET NAME =
SUBSTRING(name,CHARINDEX('(',name)+1,(CHARINDEX(')',name)-CHARINDEX('(',name)-1))+
' ('+SUBSTRING(name,1,CHARINDEX('(',name)-1)+')'
FROM Employee
如果我是你,我會爲名稱和暱稱創建單獨的列。試圖快速獲取字符串部分可以防止sql server使用可能真正導入並從性能角度來看的索引。
所以有basicly兩種選擇:
希望它有幫助!
我曾在幾個項目的工作,我已經做到了我的方式來更新同樣的問題,你在3個步驟,通過了:
1)ID或名稱創建表字段並將值插入表格
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
那麼通過選擇括號內的子字符串來構建一個新的NAME字段呢?我從來沒有使用sql-server,但這看起來像一個很好的起點:http://technet.microsoft.com/en-us/library/ms186323.aspx –
你可以按照暱稱對它進行排序,而不用交換它:build正則表達式返回的暱稱和順序。 - 另外,您的情況表明您寧願將英文名稱存儲在單獨的列中,而不是放在括號中。 –