Dates that match the pattern 2 numbers a single space the month a single space then a 4 digit year this will be good for any dates following this format from 1000 AD to 9999AD with a NVARCHAR(MAX) field note it will only pick up the last date in a text field.
Sourced adapted and tested from Stack Overflow
*Please note the square brackets c square brackets string is being omitted for months containing the letter c (I believe it relates to html and the copyright symbol I can’t place it anywhere in my post). You will need to add it back in to those months that contain c. I have therefore replaced square brackets c square brackets with [k]
January
Create function [dbo].[m01returnjandates](@fieldtosearch as nvarchar(max)) Returns nvarchar(15) as begin declare @length as int declare @loop as int declare @retjandate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-14 begin if exists(select 1 where substring(@fieldtosearch,@loop,15) like '[0-9][0-9][ ][J][a][n][u][a][r][y][ ][0-9][0-9][0-9][0-9]') set @retjandate= substring(@fieldtosearch,@loop,15) set @loop=@loop+1 end Return @retjandate End
===
February
Create function [dbo].[m02returnfebdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(16) as begin declare @length as int declare @loop as int declare @retfebdate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-15 begin if exists(select 1 where substring(@fieldtosearch,@loop,16) like '[0-9][0-9][ ][F][e][b][r][u][a][r][y][ ][0-9][0-9][0-9][0-9]') set @retfebdate= substring(@fieldtosearch,@loop,16) set @loop=@loop+1 end Return @retfebdate End
====
March
Create function [dbo].[m03returnmardates](@fieldtosearch as nvarchar(max)) Returns nvarchar(13) as begin declare @length as int declare @loop as int declare @retmardate as date 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][ ][M][a][r][k][h][ ][0-9][0-9][0-9][0-9]') set @retmardate= substring(@fieldtosearch,@loop,13) set @loop=@loop+1 end Return @retmardate End
===
April
Create function [dbo].[m04returnaprdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(13) as begin declare @length as int declare @loop as int declare @retaprdate as date 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][ ][A][p][r][i][l][ ][0-9][0-9][0-9][0-9]') set @retaprdate= substring(@fieldtosearch,@loop,13) set @loop=@loop+1 end Return @retaprdate End
===
May
Create function [dbo].[m05returnmaydates](@fieldtosearch as nvarchar(max)) Returns nvarchar(11) as begin declare @length as int declare @loop as int declare @retmaydate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-10 begin if exists(select 1 where substring(@fieldtosearch,@loop,11) like '[0-9][0-9][ ][M][a][y][ ][0-9][0-9][0-9][0-9]') set @retmaydate= substring(@fieldtosearch,@loop,11) set @loop=@loop+1 end Return @retmaydate End
===
June
Create function [dbo].[m06returnjundates](@fieldtosearch as nvarchar(max)) Returns nvarchar(12) as begin declare @length as int declare @loop as int declare @retjundate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-11 begin if exists(select 1 where substring(@fieldtosearch,@loop,12) like '[0-9][0-9][ ][J][u][n][e][ ][0-9][0-9][0-9][0-9]') set @retjundate= substring(@fieldtosearch,@loop,12) set @loop=@loop+1 end Return @retjundate End
===
July
Create function [dbo].[m07returnjuldates](@fieldtosearch as nvarchar(max)) Returns nvarchar(12) as begin declare @length as int declare @loop as int declare @retjuldate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-11 begin if exists(select 1 where substring(@fieldtosearch,@loop,12) like '[0-9][0-9][ ][J][u][l][y][ ][0-9][0-9][0-9][0-9]') set @retjuldate= substring(@fieldtosearch,@loop,12) set @loop=@loop+1 end Return @retjuldate End
===
August
Create function [dbo].[m08returnaugdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(14) as begin declare @length as int declare @loop as int declare @retaugdate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-13 begin if exists(select 1 where substring(@fieldtosearch,@loop,14) like '[0-9][0-9][ ][A][u][g][u][s][t][ ][0-9][0-9][0-9][0-9]') set @retaugdate= substring(@fieldtosearch,@loop,14) set @loop=@loop+1 end Return @retaugdate End
===
September
Create function [dbo].[m09returnsepdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(17) as begin declare @length as int declare @loop as int declare @retsepdate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-16 begin if exists(select 1 where substring(@fieldtosearch,@loop,17) like '[0-9][0-9][ ][S][e][p][t][e][m][b][e][r][ ][0-9][0-9][0-9][0-9]') set @retsepdate= substring(@fieldtosearch,@loop,17) set @loop=@loop+1 end Return @retsepdate End
===
October
Create function [dbo].[m10returnoctdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(15) as begin declare @length as int declare @loop as int declare @retjoctdate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-14 begin if exists(select 1 where substring(@fieldtosearch,@loop,15) like '[0-9][0-9][ ][O][k][t][o][b][e][r][ ][0-9][0-9][0-9][0-9]') set @retoctdate= substring(@fieldtosearch,@loop,15) set @loop=@loop+1 end Return @retoctdate End
===
November
Create function [dbo].[m11returnnovdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(16) as begin declare @length as int declare @loop as int declare @retnovdate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-15 begin if exists(select 1 where substring(@fieldtosearch,@loop,16) like '[0-9][0-9][ ][N][o][v][e][m][b][e][r][ ][0-9][0-9][0-9][0-9]') set @retnovdate= substring(@fieldtosearch,@loop,16) set @loop=@loop+1 end Return @retnovdate End
===
December
Create function [dbo].[m12returndecdates](@fieldtosearch as nvarchar(max)) Returns nvarchar(16) as begin declare @length as int declare @loop as int declare @retdecdate as date set @loop =1 set @length = len(@fieldtosearch) while @loop<=@length-15 begin if exists(select 1 where substring(@fieldtosearch,@loop,16) like '[0-9][0-9][ ][D][e][k][e][m][b][e][r][ ][0-9][0-9][0-9][0-9]') set @retdecdate= substring(@fieldtosearch,@loop,16) set @loop=@loop+1 end Return @retdecdate End
===
And the inefficent example TSQL
SELECT dbo.T032email.pkid, ISNULL(dbo.m01returnjandates(dbo.T032email.body), ISNULL(dbo.m02returnfebdates(dbo.T032email.body), ISNULL(dbo.m03returnmardates(dbo.T032email.body), ISNull(dbo.m04returnaprdates(dbo.T032email.body), ISNULL(dbo.m05returnmaydates(dbo.T032email.body), ISNULL(dbo.m06returnjundates(dbo.T032email.body), ISNULL(dbo.m07returnjuldates(dbo.T032email.body), ISNull(dbo.m08returnaugdates(dbo.T032email.body, ISNULL(dbo.m09returnsepdates(dbo.T032email.body), ISNULL(dbo.m10returnoctdates(dbo.T032email.body), ISNULL(dbo.m11returnnovdates(dbo.T032email.body), dbo.m12returndecdates(dbo.T032email.body) ))))))))))) as trandate FROM T032email;