Not sure, how or why you want to parse string like 'San Francisco, CA, USA' into 3 columns as this would still leave non-atomic data in one column, thus violating 1NF, but what about:
declare @string varchar(100)
set @string = 'San Francisco, CA, USA'
select
parsename(replace(replace(@string,',',''),' ','.'),4)
, parsename(replace(replace(@string,',',''),' ','.'),3)
, parsename(replace(replace(@string,',',''),' ','.'),2)
, parsename(replace(replace(@string,',',''),' ','.'),1)
set @string = 'Palos Verdes, CA'
select
parsename(replace(replace(@string,',',''),' ','.'),3)
, parsename(replace(replace(@string,',',''),' ','.'),2)
, parsename(replace(replace(@string,',',''),' ','.'),1)
--
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.org/blogs
My blog: http://www.insidesql.org/blogs/frankkalis/[/url]