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

2586 Boynton Ave, Bronx, NY 10472
14 Anderson Ave, Bronx, NY 10452
2588 E 15 Ave, Bronx, NY 10456
15651-14471 East 73rd Street, Brooklyn, NY 11234
10656-1114 W 143rd St, New York, NY 10030
44499 Teller Avenue, Bronx, NY 10456
65959 Summit Ave, Bronx, NY 10452



чтоб так получить:

2586 Boynton
14 Anderson
2588 E
15651-14471 East
10656-1114 W
44499 Teller
65959 Summit
9 янв 13, 09:59    [13739457]     Ответить | Цитировать Сообщить модератору
 Re: отрезать после 2го пробела  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
LEFT+CHARINDEX(...,...,CHARINDEX(...,...))
А где гарантия, что между словами один пробел?
Где гарантия, что в любой строке больше одного пробела?
9 янв 13, 10:14    [13739548]     Ответить | Цитировать Сообщить модератору
 Re: отрезать после 2го пробела  [new]
4545
Guest
Тут надо парсер делать,учитывать многие ситуации.
9 янв 13, 10:29    [13739658]     Ответить | Цитировать Сообщить модератору
 Re: отрезать после 2го пробела  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
4545,

добавьте к в конец поля еще один (а лучше 2 на случай если без пробелов вообще) пробел )))) типа select field+' ' from tbl
и не заморачивайтесь парсерами - 2й чариндекс.... и будет щастье

select left(FIELD,charindex(' ', FIELD+' ', charindex(' ', FIELD+' ')) from tbl

как нибудь так
9 янв 13, 14:33    [13741468]     Ответить | Цитировать Сообщить модератору
 Re: отрезать после 2го пробела  [new]
Crimean
Member

Откуда:
Сообщений: 13148
по-простому, без обработки исключений - как-то так:

select left( t, p2 - 1 ) , t
from
(
select t, charindex( ' ', t ) as p1, charindex( ' ', t, charindex( ' ', t )+1) as p2
from
(select		 '2586 Boynton Ave, Bronx, NY 10472' as t
union all select '14 Anderson Ave, Bronx, NY 10452'
union all select '2588 E 15 Ave, Bronx, NY 10456'
union all select '15651-14471 East 73rd Street, Brooklyn, NY 11234'
union all select '10656-1114 W 143rd St, New York, NY 10030'
union all select '44499 Teller Avenue, Bronx, NY 10456'
union all select '65959 Summit Ave, Bronx, NY 10452'
) as a
) as b
9 янв 13, 14:57    [13741707]     Ответить | Цитировать Сообщить модератору
 Re: отрезать после 2го пробела  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Предварительно заменить все непрерывные последовательности пробелов одиночными пробелами. :))
Заменить нулевые результаты CHARINDEX() на NULLы.
9 янв 13, 15:36    [13742053]     Ответить | Цитировать Сообщить модератору
 Re: отрезать после 2го пробела  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
declare @t table (s varchar(100));

insert into @t
values
 (''),
 ('2586 '),
 ('2586 tt'),
 ('2586    Boynton  Ave, Bronx, NY 10472'),
 ('14 Anderson Ave, Bronx, NY 10452'),
 ('2588 E 15 Ave, Bronx, NY 10456'),
 ('15651-14471 East 73rd Street, Brooklyn, NY 11234'),
 ('10656-1114 W 143rd St, New York, NY 10030'),
 ('44499 Teller Avenue, Bronx, NY 10456'),
 ('65959 Summit Ave, Bronx, NY 10452');

select
 t.s,
 isnull(rtrim(left(t.s, b.p - 1)), t.s)
from
 @t t cross apply
 (select nullif(patindex('% [^ ]%', t.s), 0) as p) a cross apply
 (select nullif(patindex('% [^ ]%', right(t.s, nullif(len(t.s) - a.p, 0))), 0) + a.p as p) b;
9 янв 13, 16:28    [13742487]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить