As an alternative to the above answers. If you want to just ignore what is between (
and )
you can use this slightly modified version of the InitCap function
CREATE FUNCTION [dbo].[InitCap] (
@InputString VARCHAR(4000)
)
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1) = ' '
DECLARE @OutputString VARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 1
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString,@Index,1)
IF @Char = '('
BEGIN
WHILE @Index <= LEN(@InputString)
AND @Char NOT IN (')')
BEGIN
SET @Index = @Index + 1
SET @PrevChar = @Char
SET @Char = SUBSTRING(@InputString,@Index,1)
SET @OutputString = STUFF(@OutputString,@Index,1,@Char)
END
END
IF @PrevChar IN (' ',';',':','!','?',',','.','_','-','/','&','''')
BEGIN
IF @PrevChar != ''''
OR UPPER(@Char) != 'S'
SET @OutputString = STUFF(@OutputString,@Index,1,UPPER(@Char))
END
SET @Index = @Index + 1
SET @PrevChar = @Char
END
RETURN @OutputString
END
GO
EXAMPLE
SELECT [dbo].[InitCap](n)
FROM ( VALUES ( 'VENDOR CORPORATION (GA/ATL)'),
( 'VENDOR CORPORATION (ga/atl)'),
( 'VENDOR CORPORATION (Ga/Atl)') ) t (n)
output
--------
Vendor Corporation (GA/ATL)
Vendor Corporation (ga/atl)
Vendor Corporation (Ga/Atl)
if you always want to CAPS everything inside (
and )
simply use SET @OutputString = STUFF(@OutputString,@Index,1,UPPER(@Char))
in both places