Here is an addition to the previous code, nothing fancy but it should work most of the time
😎
USE tempdb;
GO
SET NOCOUNT ON;
SELECT
AW.Id
,CS.city_state_ID
,AW.Address
,CASE
WHEN CHARINDEX(CS.City,AW.Address,1) = 0 THEN AW.Address
WHEN CHARINDEX(CS.City,AW.Address,1) > 0 THEN
CASE
WHEN RIGHT(SUBSTRING(AW.Address,1,CHARINDEX(CS.City,AW.Address,1) - 2),1) IN (' ',',') THEN SUBSTRING(AW.Address,1,CHARINDEX(CS.City,AW.Address,1) - 3)
ELSE SUBSTRING(AW.Address,1,CHARINDEX(CS.City,AW.Address,1) - 2)
END
ELSE ''
END
,CS.CITY
,CS.State
FROM dbo.TBL_ADDRESS_WORKTABLE AW
CROSS APPLY dbo.tbl_city_state CS
WHERE
(
AW.city = CS.City
AND
AW.State = CS.State
)
OR
(
CHARINDEX(CS.CITY, AW.Address,1) > 0
AND
CHARINDEX(CS.State, AW.Address,1) > 0
)
OR
(
CHARINDEX(REPLACE(CS.CITY,CHAR(32),''), AW.Address,1) > 0
AND
CHARINDEX(CS.State, AW.Address,1) > 0
)
;
Quick thought, mis-spellings could be handled via alternative name/spelling table.