Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Найти даты в строке  [new]
PolterGuest
Guest
как в строке текста найти все даты в формате dd.MM.yyyy (например, 29.11.2010) ?
11 июн 11, 23:39    [10802678]     Ответить | Цитировать Сообщить модератору
 Re: Найти даты в строке  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1557
PolterGuest,

Через регулярные выражения, RegExp
11 июн 11, 23:56    [10802700]     Ответить | Цитировать Сообщить модератору
 Re: Найти даты в строке  [new]
PolterGuest
Guest
В Delphi то понятно, а в стандартном T-SQL такое разве есть ( без подключения каких-либо библиотек )
12 июн 11, 00:01    [10802711]     Ответить | Цитировать Сообщить модератору
 Re: Найти даты в строке  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1557
PolterGuest,

Сорри, не заметил что сервер....
12 июн 11, 00:03    [10802713]     Ответить | Цитировать Сообщить модератору
 Re: Найти даты в строке  [new]
aleks2
Guest
PolterGuest
как в строке текста найти все даты в формате dd.MM.yyyy (например, 29.11.2010) ?


1. Разделить строку на слова
CREATE function [dbo].[f_StrToTableEx](@str varchar(8000), @delimiter varchar(64)=',')
returns table as
return(
WITH str_nums ( n1, n2, Number ) 
AS 
( 
select  1-LEN(@delimiter) as n1, charindex(@delimiter, @str+@delimiter) as n2, 0 as Number  
UNION ALL 
select n2 as n1, charindex(@delimiter, @str+@delimiter, n2+LEN(@delimiter)) as n2, Number+1 as Number
from str_nums
WHERE n2<len(@str)
) 
SELECT SUBSTRING(@str, n1+LEN(@delimiter), n2-n1-1) as Value, Number, n1+1 as StartPosition FROM str_nums
)
2. Проанализировать слова на предмет "даты в формате dd.MM.yyyy" функцией ISDATE()
12 июн 11, 06:42    [10802927]     Ответить | Цитировать Сообщить модератору
 Re: Найти даты в строке  [new]
aleks2
Guest
Пардон. Вариант функции выше не приспособлен к пробелам как разделителям. Исправляемся
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
12 июн 11, 07:10    [10802938]     Ответить | Цитировать Сообщить модератору
 Re: Найти даты в строке  [new]
PolterGuest
Guest
aleks2,

большое спасибо!
14 июн 11, 08:05    [10808114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить