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

Откуда:
Сообщений: 34
Помогите пожалуйста справиться с задачей. Нужно вырезать 8 и нули и оставить число после 80+ (нулей может быть от 2 до 7) , т.е. если число 8007.15 должно остаться 7.15, если 80000895, должно остаться 895.
На данный момент, обрезается правильно если не встречается сразу после нулей 8.



CREATE TABLE supportContacts 
       (
    id int identity primary key, 
    type varchar(20), 
    details varchar(30)
   );

INSERT INTO supportContacts
(type, details)
VALUES
('80007.15', 'admin@sqlfiddle.com'),
('807.15', 'admin@sqlfiddle.com'),
('7.15', 'admin@sqlfiddle.com'),
('800007.15', 'admin@sqlfiddle.com'),
('8000895', 'admin@sqlfiddle.com'),
('808,12', '@sqlfiddle');

select type, PATINDEX('%[^(80+)]%', type), LEN(type),
      SUBSTRING (type, PATINDEX('%[^(80+)]%', type), LEN(type) - PATINDEX('%[^(80+)]%', type) + 1)
from supportContacts
23 фев 15, 11:48    [17301090]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Прочтите плиз
23 фев 15, 11:55    [17301103]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
bojeviciok
Member

Откуда:
Сообщений: 34
п.с. Сервер 2012Р2
23 фев 15, 12:12    [17301146]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
bojeviciok
п.с. Сервер 2012Р2

жесть Нет такой версии
23 фев 15, 12:23    [17301174]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
bojeviciok
Member

Откуда:
Сообщений: 34
Maxx,

упс. 2008Р2
23 фев 15, 12:27    [17301178]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
bojeviciok
Maxx,

упс. 2008Р2

ну а посик по сайту уже попробовали ? Вариантов решения вашей задачи 1000 штук здесь
23 фев 15, 12:30    [17301184]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
bojeviciok
Member

Откуда:
Сообщений: 34
Maxx,
поиск всегда в первую очередь и сейчас продолжаю искать, пока не нашлось нужного ответа.
23 фев 15, 12:33    [17301192]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
select
 id,
 case when type like '80%' then replace(ltrim(replace(stuff(type, 1, 1, ''), '0', ' ')), ' ', '0') else type end,
 details
from
 supportContacts;
23 фев 15, 12:54    [17301256]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
bojeviciok,

ext.Regex_Replace[/quot]

К сообщению приложен файл. Размер - 8Kb
23 фев 15, 13:45    [17301350]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
bojeviciok
Member

Откуда:
Сообщений: 34
invm
select
 id,
 case when type like '80%' then replace(ltrim(replace(stuff(type, 1, 1, ''), '0', ' ')), ' ', '0') else type end,
 details
from
 supportContacts;


Спасибо.
Вот только когда 80.3 уже не подходит, выдает результат .3
23 фев 15, 17:07    [17301867]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
bojeviciok
Нужно вырезать 8 и нули и оставить число после 80+ (нулей может быть от 2 до 7) , т.е. если число 8007.15 должно остаться 7.15

bojeviciok
Спасибо.
Вот только когда 80.3 уже не подходит, выдает результат .3

Как просили так и сделали..
Да и дописать под ваши новіе требования вообще не проблема
23 фев 15, 17:12    [17301884]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
bojeviciok
Member

Откуда:
Сообщений: 34
Maxx
bojeviciok
Нужно вырезать 8 и нули и оставить число после 80+ (нулей может быть от 2 до 7) , т.е. если число 8007.15 должно остаться 7.15

bojeviciok
Спасибо.
Вот только когда 80.3 уже не подходит, выдает результат .3

Как просили так и сделали..
Да и дописать под ваши новіе требования вообще не проблема

Неточно написано задание, не учтено, что исходные данные могут быть 8, 80 , 80.1 - и такими же они должны остаться и в результате.
23 фев 15, 17:38    [17301973]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
bojeviciok
Неточно написано задание, не учтено, что исходные данные могут быть 8, 80 , 80.1 - и такими же они должны остаться и в результате.

так подравте маску для like
23 фев 15, 17:51    [17302001]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
bojeviciok
Неточно написано задание, не учтено, что исходные данные могут быть 8, 80 , 80.1 - и такими же они должны остаться и в результате.
Подсказка: берете мой пример и дописываете один единственный 0 в нужное место.
23 фев 15, 17:52    [17302005]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
bojeviciok
Member

Откуда:
Сообщений: 34
Да да. Код уже в порядке. выдает что надо. Спасибо.
23 фев 15, 18:07    [17302033]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
bojeviciok
Неточно написано задание, не учтено, что исходные данные могут быть 8, 80 , 80.1 - и такими же они должны остаться и в результате.


-- Выделяем две группы (...)(...), и оставляем только вторую

select ext.Regex_Replace(val, '(^80+)(\d+[.,]?\d*)', '$2', 'Singleline') as val, email
from
	t0;
23 фев 15, 18:08    [17302034]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+

/*

     Используя positive look ahead, говорим что после 8000... должна быть хоть одна цифра.
     Только в этом случае, заменяем 80000... на пустую строку. 

     Выражение (?=\d) не является частью match, совпавшим считается только часть ^80+.

*/
ext.Regex_Replace(val, '^80+(?=\d)', '', 'Singleline')
23 фев 15, 18:30    [17302091]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Jaffar
Member

Откуда:
Сообщений: 633
churupaha,

declare @__TEMP table(String varchar(512))

insert into @__TEMP(STRING) 
values('80007.15'), ('807.15'), ('7.15'), ('800007.15'), ('8000895'), ('808,12'),('70000006'), ('888')


select 
t.String,
substring(t.String, IsNULL(tp2.x1, 1), 10000),
isNULL(tp2.x1, 1)
from @__TEMP t
--- найдем первый ненулевой символ, который после восьмерки, если восьмерки нет - то 1
outer apply(select patindex('%[^0]%', substring(t.String, 2, 1000))+1 x1 where t.String like '80%' ) tp2
24 фев 15, 10:36    [17303510]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Jaffar,

это автору топика...

мне не нужно, спасибо, у меня regex под руками имеется. я люблю, чтобы работало "... по щучьему велению, по моему хотению...", декларативно т. е.. пускай конечные автоматы сами "думають" в какой последовательности им что делать.
24 фев 15, 10:42    [17303543]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Предлагаю сделать подфорум "CLR" для фанатов.
Пусть они там все задачи решают своими функциями.
24 фев 15, 10:48    [17303586]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
iap,

хех, тогда уж Regex для фанатов. не ясно, например, почему MS не сделает их поддержку из коробки.
24 фев 15, 10:53    [17303617]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
churupaha
не ясно, например, почему MS не сделает их поддержку из коробки.

вот здеся +1
24 фев 15, 10:57    [17303651]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
а в некоторых других СУБД из коробки

^_^
24 фев 15, 10:59    [17303661]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Maxx
churupaha
не ясно, например, почему MS не сделает их поддержку из коробки.

вот здеся +1
Мы тут это пожелание периодически пишем-пишем, - толку ноль!
Не желают к нам прислушиваться.
А ведь стандарт ANSI предписывает...
24 фев 15, 11:02    [17303688]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки  [new]
o-o
Guest
Jaffar,
вы прошляпили уточнение автора:
bojeviciok
исходные данные могут быть 8, 80 , 80.1 - и такими же они должны остаться и в результате.

invm-вариант уже переправлен (хоть и не обнародован), а ваш еще нет,
у вас 80.1 -> .1

iap,
а что, правильно, давайте откроем топик "CLR-копилка",
где желающие будут делиться своими CLR-изысканиями.

+ to churupaha
churupaha,
вы поняли, да, как тут работает фак, там если 100-летней давности, то 3 буквы,
а если хочется посвежее, тебе отвечают уже во все 4,
но если завести топик с правильным названием и в него регулярно что-то дописывать, то он будет всплывать.

так вот, про сертификаты...
конечно, проще всего забить и обидеться, например "раз не публикуют, ну их нафиг".
но можно поступить по-другому:
тоже сделать свой топик. в названии поместить FAQ в явном виде.
допустим, FAQ: Giving Permissions Using Certificates
искать удобно,
и надеюсь, не будет копирайтовых пренензий к первым трем буквам названия:
когда вынуждают, то сами напросились
24 фев 15, 11:04    [17303709]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить