Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
там формат примерно такой:
'бла блабла 18.08.94блаблабла'
как-то можно без гор чариндексов и сабстрингов ?

---------------------------------------------------------
SET @@verSION = 'Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6002: Service Pack 2) '
28 сен 12, 10:01    [13236721]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Glory
Member

Откуда:
Сообщений: 104760
Erik_Kartmann
как-то можно без гор чариндексов и сабстрингов ?

select replace('бла блабла 18.08.94блаблабла', 'бла', '')
28 сен 12, 10:02    [13236728]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
qwerty112
Guest
Glory
Erik_Kartmann
как-то можно без гор чариндексов и сабстрингов ?

select replace('бла блабла 18.08.94блаблабла', 'бла', '')

))
ещё ltrim пригодится )))
28 сен 12, 10:04    [13236744]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
select replace('бла блабла 18.08.94блаблабла', '[а..я]', '')
а как-то так можно?
28 сен 12, 10:05    [13236755]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
Erik_Kartmann,
раз
два
28 сен 12, 10:10    [13236790]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
qwerty112
Glory
пропущено...

select replace('бла блабла 18.08.94блаблабла', 'бла', '')

))
ещё ltrim пригодится )))
ltrim-то не нужен. Но у меня на сервере, например, '18.08.94' никакая не дата!
Так что постановка задачи хромает на две ноги
28 сен 12, 10:14    [13236807]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
.*от\s*(?<вфеу> \d[1-4].\d[2].\d[1-4])
написал вроде как регулярное выражение.
А как из него теперь группу date вытащить в селекте?
28 сен 12, 12:13    [13237757]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
ну, или "вфеу"
28 сен 12, 12:14    [13237763]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Glory
Member

Откуда:
Сообщений: 104760
Erik_Kartmann
написал вроде как регулярное выражение.

Написал куда ?
28 сен 12, 12:14    [13237769]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
А.. я загрузил сборку из кодепрожекта, там нет такой функции, которая возвращает группы.
далее что-то типо такого:
DECLARE @Pattern nvarchar(255);
--http://rubular.com/r/IOyG9EAzkE

SET @Pattern = '.*от\s*(\d[1-4].\d[2].\d[1-4])'; 

select dbo.RegExpMatches(Text, @Pattern)
From dbo.Table
28 сен 12, 12:23    [13237864]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
kalimba
Member

Откуда:
Сообщений: 297
Erik_Kartmann,
Так не устроит?
DECLARE @str nvarchar(255) = 'шла саша по шоссе и сосала18.04.1994сушку'
SELECT SUBSTRING(@str, PATINDEX('%[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]%', @str), 10)
28 сен 12, 12:37    [13238024]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
всё. работает. переделать пришлось
	[SqlFunction(Name = "RegexStrMatch", IsDeterministic = true, IsPrecise = true)]
	public static SqlString RegexStrMatch(SqlString input, SqlString pattern, SqlInt32 options, SqlInt32 group)
	{
		if (input.IsNull)
		{
			return SqlString.Null;
		}
		if (pattern.IsNull)
		{
			pattern = String.Empty;		//""
		}
		if (options.IsNull)
		{
			options = 0;  //RegexOptions.None
		}

		try
		{
			Match match = Regex.Match((string)input, (string)pattern, (RegexOptions)(int)options);
			if (match.Value != String.Empty)
			{
                return new SqlString(match.Groups[(int)group].Value);
			}
		}
		catch
		{
			throw;
		}

		return SqlString.Null;
	}
28 сен 12, 12:52    [13238152]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
DECLARE @Pattern nvarchar(255);

SET @Pattern = '.*от\s*(\d[1-4].\d[2].\d[1-4])'; 

select dbo.RegexStrMatch(text, @Pattern,0,1)
From dbo.Table
28 сен 12, 12:53    [13238159]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
kalimba
Erik_Kartmann,
Так не устроит?
DECLARE @str nvarchar(255) = 'шла саша по шоссе и сосала18.04.1994сушку'
SELECT SUBSTRING(@str, PATINDEX('%[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]%', @str), 10)

не. там текст вручную вводился, поэтому лучше через регулярку сделаю.
28 сен 12, 12:55    [13238167]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
declare @t table ( str_val varchar(255) )
insert into @t
select 'шла саша по шоссе и сосала18.04.1994сушку'
union all
select '2012-09-28'
union all
select 'бла блабла 18.08.94блаблабла';


with cte
as
(
select str_val, number, substring( str_val, number, 1 ) [char]
  from @t t1 inner join master..spt_values t2
    on type = 'P' and number between 1 and len(str_val)
  where substring( str_val, number, 1 ) not like '[a-b, а-я]'
) 
select str_val
    , ( select char + '' 
          from cte where str_val = t.str_val for xml path('') 
      ) ret_val
from cte t
group by str_val
28 сен 12, 13:13    [13238307]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Erik_Kartmann
kalimba
Erik_Kartmann,
Так не устроит?
DECLARE @str nvarchar(255) = 'шла саша по шоссе и сосала18.04.1994сушку'
SELECT SUBSTRING(@str, PATINDEX('%[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]%', @str), 10)

не. там текст вручную вводился, поэтому лучше через регулярку сделаю.

чем лучше-то? ) для текста совершенно в порядке вещей быть набранным вручную.
28 сен 12, 13:16    [13238329]     Ответить | Цитировать Сообщить модератору
 Re: выделить из строки дату  [new]
Erik_Kartmann
Member

Откуда: Пиндырдышханда
Сообщений: 948
нет, ребята, регулярные выражения - оно для максимум тысячи записей(((
28 сен 12, 13:51    [13238616]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить