Stack overflow sourced, adapted and personally tested code
How to get part of a string that matches with a regular expression
The following function arose out of a desire to find Eplanning Scotland planning references numbers which follow the format of 9 numerals a dash and then 3 numerals within a NVARCHAR(MAX) field type. The characteristics of the string was that it is always the same length.
In SSMS select the New Query button
Create function [dbo].[ReturnEplanningNumberFull](@fieldtosearch as nvarchar(max))
Returns nvarchar(13)
as
begin
declare @length as int
declare @loop as int
declare @reteplan as varchar(13)
set @loop =1
set @length = len(@fieldtosearch)
while @loop<=@length-12
begin
if exists(select 1 where substring(@fieldtosearch,@loop,13) like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][-][0-9][0-9][0-9]')
set @reteplan = substring(@fieldtosearch,@loop,13)
set @loop=@loop+1
end
Return @reteplan
end
And then to create a View using this you can write something like ;
CREATE VIEW v026eplanrefs AS SELECT dbo.THETABLE.pkid, dbo.ReturnEplanningNumberFull(dbo.THETABLE.FIELDCONTAINSREFERENCE) as eplanno FROM dbo.THETABLE;
I subsequently altered this to identify the first 9 digits as this is sufficent to uniquely identify eplanning records.
CREATE function [dbo].[ReturnEplanningNumberShort](@fieldtosearch as nvarchar(max))
Returns nvarchar(9)
as
begin
declare @length as int
declare @loop as int
declare @reteplanshort as nvarchar(9)
set @loop =1
set @length = len(@fieldtosearch)
while @loop<=@length-8
begin
if exists(select 1 where substring(@fieldtosearch,@loop,9) like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
set @reteplanshort = substring(@fieldtosearch,@loop,9)
set @loop=@loop+1
end
Return @reteplanshort
end
