How to Capitalize letters that are after a special character? I have checked the answer to this question and couldn't find an exception for names that start after a special character like dot.
for example ".TOM WILSON" 

I have tried this query

declare @a varchar(30); 

set @a = '.TOM WILSON';

select stuff((
       select ' '+upper(left(T3.V, 1))+lower(stuff(T3.V, 1, 1, ''))
       from (select cast(replace((select @a as '*' for xml path('')), ' ', '&lt;X/&gt;') as xml).query('.')) as T1(X)
         cross apply T1.X.nodes('text()') as T2(X)
         cross apply (select T2.X.value('.', 'varchar(30)')) as T3(V)
       for xml path(''), type
       ).value('text()[1]', 'varchar(30)'), 1, 1, '') as [Capitalize first letter only];


Is it possible to ask SQL skip special Characters?
I am new to the concept and will appreciate any source that can give me a better understanding.
Here is one for Caps after any NON-ALPHA character (including spaces/special characters.

Edit: Oops, I didn't realize you wanted ALL letters to be capitalized.  Just thought you meant InitCaps.  I'll leave it up so you can work with it (should just be a matter of changing the REGEX) and mold it to what you need unless others would like me to take it down.

Inspired by (stolen from):
http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/sql-server-proper-case-function/

DECLARE @String VARCHAR(100)

SET @String = 'Hello.this is@aTest'
DECLARE @Position INT
;
--===== Update the first character no matter what and then find the next position that we 
     -- need to update.  The collation here is essential to making this so simple.
     -- A-z is equivalent to the slower A-Z
SELECT @String   = STUFF(LOWER(@String),1,1,UPPER(LEFT(@String,1))) COLLATE Latin1_General_Bin,
        @Position = PATINDEX('%[^A-Za-z''][a-z]%',@String COLLATE Latin1_General_Bin)
;
--===== Do the same thing over and over until we run out of places to capitalize.
     -- Note the reason for the speed here is that ONLY places that need capitalization
     -- are even considered for @Position using the speed of PATINDEX. 
  WHILE @Position &gt; 0
SELECT @String   = STUFF(@String,@Position,2,UPPER(SUBSTRING(@String,@Position,2))) COLLATE Latin1_General_Bin,
        @Position = PATINDEX('%[^A-Za-z''][a-z]%',@String COLLATE Latin1_General_Bin)
;

SELECT @String;
-- RETURN @String; --Only for functions

--Output: Hello.This Is@Atest


And here it is as a function:

CREATE FUNCTION dbo.InitialCap(@String VARCHAR(8000))

------------------------------
RETURNS VARCHAR(8000)
     AS
  BEGIN 

DECLARE @Position INT
;
--===== Update the first character no matter what and then find the next postion that we 
     -- need to update.  The collation here is essential to making this so simple.
     -- A-z is equivalent to the slower A-Z
SELECT @String   = STUFF(LOWER(@String),1,1,UPPER(LEFT(@String,1))) COLLATE Latin1_General_Bin,
        @Position = PATINDEX('%[^A-Za-z''][a-z]%',@String COLLATE Latin1_General_Bin)
;
--===== Do the same thing over and over until we run out of places to capitalize.
     -- Note the reason for the speed here is that ONLY places that need capitalization
     -- are even considered for @Position using the speed of PATINDEX. 
  WHILE @Position &gt; 0
SELECT @String   = STUFF(@String,@Position,2,UPPER(SUBSTRING(@String,@Position,2))) COLLATE Latin1_General_Bin,
        @Position = PATINDEX('%[^A-Za-z''][a-z]%',@String COLLATE Latin1_General_Bin)
;
-----------------
RETURN @String;
    END ;