I was working for an ASP (application service provider) awhile back and got sick of formatting our members names in code at the time of rendering the page.
I asked our DBA for advice if he thought it would be better performance to simply do this in the SQL calls to the database, of course his answer was yes, however what he suggested was to simply concatenate the name parts into an alias field.
Needless to say, it ended up bombing the page out around 1000 records.
After searching online for a few hours I came across a SQL Function that does exactly what was needed, and WHAMMMOOO!!! No more page bombing.
Here it is, with usage to share with all (because it took so long to find it)
-
SET ANSI_NULLS ON
-
SET QUOTED_IDENTIFIER ON
-
GO
-
ALTER FUNCTION [dbo].[FormatName](@NameString varchar(100), @NameFormat varchar(20))
-
returns varchar(100) AS
-
begin
-
–FormatName parses a NameString into its component parts and returns it in a requested format.
-
–
-
–@NameString is the raw value to be parsed.
-
–@NameFormat is a string that defines the output format. Each letter in the string represents
-
–a component of the name in the order that it is to be returned.
-
– [H] = Full honorific
-
– [h] = Abbreviated honorific
-
– [F] = First name
-
– [f] = First initial
-
– [M] = Middle name
-
– [m] = Middle initial
-
– [L] = Last name
-
– [l] = Last initial
-
– [S] = Full suffix
-
– [s] = Abbreviated suffix
-
– [.] = Period
-
– [,] = Comma
-
– [ ] = Space
-
-
–Example: select dbo.Formatname(‘Reverend Gregory Robert Von Finzer Junior’, ‘L, h. F m. s.’)
-
–Result: ‘Von Finzer, Rev. Gregory R. Jr.’
-
-
–Test variables
-
– declare @NameString varchar(50)
-
– declare @NameFormat varchar(20)
-
– set @NameFormat = ‘L, h. F m. s.’
-
– set @NameString = ‘Reverend Gregory Robert Von Finzer Junior’
-
-
Declare @Honorific varchar(20)
-
Declare @FirstName varchar(20)
-
Declare @MiddleName varchar(30)
-
Declare @LastName varchar(30)
-
Declare @Suffix varchar(20)
-
Declare @TempString varchar(100)
-
Declare @IgnorePeriod char(1)
-
-
–Prepare the string
-
–Make sure each period is followed by a space character.
-
SET @NameString = rtrim(ltrim(REPLACE(@NameString, ‘.’, ‘. ‘)))
-
–Eliminate double-spaces.
-
while charindex(‘ ‘, @NameString) > 0 SET @NameString = REPLACE(@NameString, ‘ ‘, ‘ ‘)
-
–Eliminate periods
-
while charindex(‘.’, @NameString) > 0 SET @NameString = REPLACE(@NameString, ‘.’, ”)
-
-
–If the lastname is listed first, strip it off.
-
SET @TempString = rtrim(LEFT(@NameString, charindex(‘ ‘, @NameString)))
-
IF @TempString IN (‘VAN’, ‘VON’, ‘MC’, ‘Mac’, ‘DE’) SET @TempString = rtrim(LEFT(@NameString, charindex(‘ ‘, @NameString, len(@TempString)+2)))
-
IF RIGHT(@TempString, 1) = ‘,’ SET @LastName = LEFT(@TempString, len(@TempString)-1)
-
IF len(@LastName) > 0 SET @NameString = ltrim(RIGHT(@NameString, len(@NameString) - len(@TempString)))
-
-
–Get rid of any remaining commas
-
while charindex(‘,’, @NameString) > 0 SET @NameString = REPLACE(@NameString, ‘,’, ”)
-
-
–Get Honorific and strip it out of the string
-
SET @TempString = rtrim(LEFT(@NameString, charindex(‘ ‘, @NameString + ‘ ‘)))
-
IF @TempString IN (‘MR’, ‘MRS’, ‘MS’, ‘DR’, ‘Doctor’, ‘REV’, ‘Reverend’, ‘SIR’, ‘HON’, ‘Honorable’, ‘CPL’, ‘Corporal’, ‘SGT’, ‘Sergeant’, ‘GEN’, ‘General’, ‘CMD’, ‘Commander’, ‘CPT’, ‘CAPT’, ‘Captain’, ‘MAJ’, ‘Major’, ‘PVT’, ‘Private’, ‘LT’, ‘Lieutenant’, ‘FATHER’, ‘SISTER’) SET @Honorific = @TempString
-
IF len(@Honorific) > 0 SET @NameString = ltrim(RIGHT(@NameString, len(@NameString) - len(@TempString)))
-
-
–Get Suffix and strip it out of the string
-
SET @TempString = ltrim(RIGHT(@NameString, charindex(‘ ‘, Reverse(@NameString) + ‘ ‘)))
-
IF @TempString IN (‘Jr’, ‘Sr’, ‘II’, ‘III’, ‘Esq’, ‘Junior’, ‘Senior’) SET @Suffix = @TempString
-
IF len(@Suffix) > 0 SET @NameString = rtrim(LEFT(@NameString, len(@NameString) - len(@TempString)))
-
-
IF @LastName IS NULL
-
begin
-
–Get LastName and strip it out of the string
-
SET @LastName = ltrim(RIGHT(@NameString, charindex(‘ ‘, Reverse(@NameString) + ‘ ‘)))
-
SET @NameString = rtrim(LEFT(@NameString, len(@NameString) - len(@LastName)))
-
–Check to see if the last name has two parts
-
SET @TempString = ltrim(RIGHT(@NameString, charindex(‘ ‘, Reverse(@NameString) + ‘ ‘)))
-
IF @TempString IN (‘VAN’, ‘VON’, ‘MC’, ‘Mac’, ‘DE’)
-
begin
-
SET @LastName = @TempString + ‘ ‘ + @LastName
-
SET @NameString = rtrim(LEFT(@NameString, len(@NameString) - len(@TempString)))
-
end
-
end
-
-
–Get FirstName and strip it out of the string
-
SET @FirstName = rtrim(LEFT(@NameString, charindex(‘ ‘, @NameString + ‘ ‘)))
-
SET @NameString = ltrim(RIGHT(@NameString, len(@NameString) - len(@FirstName)))
-
-
–Anything remaining is MiddleName
-
SET @MiddleName = @NameString
-
-
–Create the output string
-
SET @TempString = ”
-
while len(@NameFormat) > 0
-
begin
-
IF @IgnorePeriod = ‘F’ OR LEFT(@NameFormat, 1) <> ‘.’
-
begin
-
SET @IgnorePeriod = ‘F’
-
SET @TempString = @TempString +
-
case ascii(LEFT(@NameFormat, 1))
-
when ’72′ then case @Honorific
-
when ‘Dr’ then ‘Doctor’
-
when ‘Rev’ then ‘Reverend’
-
when ‘Hon’ then ‘Honorable’
-
when ‘Maj’ then ‘Major’
-
when ‘Pvt’ then ‘Private’
-
when ‘Lt’ then ‘Lieutenant’
-
when ‘Capt’ then ‘Captain’
-
when ‘Cpt’ then ‘Captain’
-
when ‘Cmd’ then ‘Commander’
-
when ‘Gen’ then ‘General’
-
when ‘Sgt’ then ‘Sergeant’
-
when ‘Cpl’ then ‘Corporal’
-
else isnull(@Honorific, ”)
-
end
-
when ’70′ then isnull(@FirstName, ”)
-
when ’77′ then isnull(@MiddleName, ”)
-
when ’76′ then isnull(@LastName, ”)
-
when ’83′ then case @Suffix
-
when ‘Jr’ then ‘Junior’
-
when ‘Sr’ then ‘Senior’
-
when ‘Esq’ then ‘Esquire’
-
else isnull(@Suffix, ”)
-
end
-
when ’104′ then case @Honorific
-
when ‘Doctor’ then ‘Dr’
-
when ‘Reverend’ then ‘Rev’
-
when ‘Honorable’ then ‘Hon’
-
when ‘Major’ then ‘Maj’
-
when ‘Private’ then ‘Pvt’
-
when ‘Lieutenant’ then ‘Lt’
-
when ‘Captain’ then ‘Capt’
-
when ‘Cpt’ then ‘Capt’
-
when ‘Commander’ then ‘Cmd’
-
when ‘General’ then ‘Gen’
-
when ‘Sergeant’ then ‘Sgt’
-
when ‘Corporal’ then ‘Cpl’
-
else isnull(@Honorific, ”)
-
end
-
when ’102′ then isnull(LEFT(@FirstName, 1), ”)
-
when ’109′ then isnull(LEFT(@MiddleName, 1), ”)
-
when ’108′ then isnull(LEFT(@LastName, 1), ”)
-
when ’115′ then case @Suffix
-
when ‘Junior’ then ‘Jr’
-
when ‘Senior’ then ‘Sr’
-
when ‘Esquire’ then ‘Esq’
-
else isnull(@Suffix, ”)
-
end
-
when ’46′ then case RIGHT(@TempString, 1)
-
when ‘ ‘ then ”
-
else ‘.’
-
end
-
when ’44′ then case RIGHT(@TempString, 1)
-
when ‘ ‘ then ”
-
else ‘,’
-
end
-
when ’32′ then case RIGHT(@TempString, 1)
-
when ‘ ‘ then ”
-
else ‘ ‘
-
end
-
else ”
-
end
-
IF ((ascii(LEFT(@NameFormat, 1)) = 72 AND @Honorific IN (‘FATHER’, ‘SISTER’))
-
OR (ascii(LEFT(@NameFormat, 1)) = 115 AND @Suffix IN (‘II’, ‘III’)))
-
SET @IgnorePeriod = ‘T’
-
end
-
SET @NameFormat = RIGHT(@NameFormat, len(@NameFormat) - 1)
-
end
-
-
RETURN @TempString
-
end












