私はこれをSubStringとPatIndexを使って解決できました。みんな、ありがとう。分割名機能パフォーマンス改善
ソリューション:
UPDATE TableX
SET
firstname = Substring(fullname, 1, Charindex(' ', fullname) - 1),
lastname = Substring(fullname, (Len(fullname) - Patindex(
'%[ ' + CHAR(8) + ']%',Reverse(fullname)) + 1) +1,Len(fullname) -
(Len(fullname) - Patindex('%[ ' + CHAR(8) + ']%',Reverse(fullname))+ 1))
WHERE ID = @ID
AND fullname IS NOT NULL
AND firstname = ''
オリジナル質問:
マイスプリット名称機能が姓と名を分割することができます。
問題は、私が得るために二度同じ機能を実行する必要があるということです。
- 姓
- 姓を取得するための第二のパス。
1回のパスで同じ最終結果を達成する方法はありますか?
UPDATE TableX
SET FirstName = dbo.ufn_SplitName(FullName,'fs'),
Lastname = dbo.ufn_SplitName(FullName,'ln')
WHERE Id = @ID AND FullName IS NOT NULL AND FirstName = ''
CREATE FUNCTION [dbo].[ufn_SplitName]
(
@pInput VARCHAR(150),
@TypeOfSplit VARCHAR(2)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @FINALOUTPUT AS VARCHAR(150)
DECLARE @FirstSpace as int
-- Determine the Number of spaces
SET @FirstSpace = CHARINDEX(' ',@pInput)
-- Get FirstName
if @TypeOfSplit = 'fs'
SET @FINALOUTPUT = LEFT(@pInput,@FirstSpace)
-- Last Name Does not exist so first name is the only value
if @TypeOfSplit = 'fs' AND @FirstSpace = 0
SET @FINALOUTPUT = @pInput
-- Get last Name
if @TypeOfSplit = 'ln' AND @FirstSpace > 0
SET @FINALOUTPUT = RIGHT(@pInput, CHARINDEX(' ', REVERSE(@pInput)) - 1)
-- Last Name does not exist
if @TypeOfSplit = 'ln' AND @FirstSpace = 0
SET @FINALOUTPUT = ''
return @FINALOUTPUT
。 –
これは99%の時間で動作します。 –
あなた自身の答えで、あなたは元の質問を解決していません。私ははるかに滑らかなソリューションを提供していると私は元の質問を解決しても、あなたは自分のソリューションに固執する。 –