UFN_CLEANCONSTITUENTSTRINGS_2
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FIRSTNAME | nvarchar(50) | IN | |
@MIDDLENAME | nvarchar(50) | IN | |
@KEYNAME | nvarchar(100) | IN | |
@ADDRESSBLOCK | nvarchar(150) | IN | |
@POSTCODE | nvarchar(12) | IN |
Definition
Copy
create function dbo.UFN_CLEANCONSTITUENTSTRINGS_2 (
@FIRSTNAME nvarchar(50),
@MIDDLENAME nvarchar(50),
@KEYNAME nvarchar(100),
@ADDRESSBLOCK nvarchar(150),
@POSTCODE nvarchar(12)
)
returns @CLEANSTRINGS table (
FIRSTNAME nvarchar(50),
MIDDLENAME nvarchar(50),
KEYNAME nvarchar(100),
STREETNUMBER nvarchar(12),
STREETNAME nvarchar(150),
POSTCODE nvarchar(12)
)
begin
declare @CLEANADDRESSBLOCK nvarchar(150),
@STREETNUMBER nvarchar(12),
@STREETNAME nvarchar(150),
@CLEANPOSTCODE nvarchar(12)
set @CLEANADDRESSBLOCK = upper(ltrim(rtrim(replace(replace(replace(replace(replace(replace(replace(replace(
@ADDRESSBLOCK,'.',''),'-',' '),',',' '),
char(13)+char(10),' '),char(10)+char(13),' '),char(13),' '),char(10),' '),' ',' '))))
if dbo.UFN_REGULAREXPRESSIONMATCH('(?:^[A-Z]?[\d-]+[A-Z]? (?:.|\n)+$)',@CLEANADDRESSBLOCK) = 1 and
charindex(' ',@CLEANADDRESSBLOCK) <= 13
begin
set @STREETNUMBER = left(@CLEANADDRESSBLOCK, charindex(' ',@CLEANADDRESSBLOCK)-1)
set @STREETNAME = right(@CLEANADDRESSBLOCK, len(@CLEANADDRESSBLOCK)-charindex(' ',@CLEANADDRESSBLOCK))
end
else
set @STREETNAME = @CLEANADDRESSBLOCK
/* TODO, in order to do this, would need to clean the addresses in the searchconstituent table too
;with CTE as (select cast(' '+@STREETNAME+' ' as nvarchar(4000)) TRANSLATEDSTREETNAME,
0 LEVEL
union all
select replace(TRANSLATEDSTREETNAME,TOKEN,TRANSLATION),
LEVEL+1
from CTE
inner join dbo.ADDRESSTOKEN m on charindex(TOKEN,TRANSLATEDSTREETNAME) > 0 and TOKEN<>TRANSLATION
where not exists(select 'x' from dbo.ADDRESSTOKEN m2 where m2.TOKEN<m.TOKEN and charindex(m2.TOKEN,TRANSLATEDSTREETNAME) > 0)
)
select top 1 @STREETNAME = ltrim(rtrim(TRANSLATEDSTREETNAME))
from CTE
order by LEVEL desc
*/
set @CLEANPOSTCODE = ltrim(rtrim(@POSTCODE))
insert into @CLEANSTRINGS
values (isnull(upper(ltrim(rtrim(replace(@FIRSTNAME,'.','')))),''),
isnull(upper(ltrim(rtrim(replace(@MIDDLENAME,'.','')))),''),
isnull(upper(ltrim(rtrim(replace(replace(@KEYNAME,'.',''),'''','')))),''),
isnull(@STREETNUMBER,''),
isnull(@STREETNAME,''),
case when @CLEANPOSTCODE like '[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' then left(@CLEANPOSTCODE,5)
else isnull(upper(@CLEANPOSTCODE),'') end)
return
end