Пардон. Вариант функции выше не приспособлен к пробелам как разделителям. Исправляемся
ALTER function [dbo].[f_StrToTableEx](@str varchar(8000), @delimiter varchar(64)=',')
returns table as
return(
WITH str_nums ( n1, n2, Number )
AS
(
select 1-DATALENGTH(@delimiter) as n1, charindex(@delimiter, @str+@delimiter) as n2, 0 as Number
UNION ALL
select n2 as n1, charindex(@delimiter, @str+@delimiter, n2+DATALENGTH(@delimiter)) as n2, Number+1 as Number
from str_nums
WHERE n2<DATALENGTH(@str)
)
SELECT SUBSTRING(@str, n1+DATALENGTH(@delimiter), n2-n1-DATALENGTH(@delimiter)) as Value, Number, n1+DATALENGTH(@delimiter) as StartPosition FROM str_nums
)
Пример
declare @t table(s nvarchar(1024))
insert @t
select N'Сегодня 12.06.11 и через год 12.06.12 методы поиска даты dd.mm.yyyy в строке останутся неизменными.'
union all
select N'Хотя некоторые трудности поиска "12.06.11" возможны.'
select *
FROM @t T cross apply dbo.f_StrToTableEx(s, ' ')
set dateformat DMY
select *
FROM @t T cross apply dbo.f_StrToTableEx(s, ' ')
WHERE ISDATE(Value)=1