Функция разделения имени Улучшение производительности - PullRequest
0 голосов
/ 31 августа 2011

Мне удалось решить эту проблему с помощью 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

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Не вдаваясь в особенности вашего кода, вы можете изменить его на табличную функцию, которая возвращает одну строку со столбцом для каждого из имени и фамилии. Затем вы можете JOIN перейти к табличной функции в вашем запросе и использовать эти столбцы в вашем запросе.

0 голосов
/ 31 августа 2011

Я бы взял отсюда функцию разделения: http://www.sqlservercentral.com/Forums/FindPost944589.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...