Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
nerv Member Откуда: Сообщений: 734 |
Ситуация такая. Импортируются xls таблицы в MS SQL - некие списки. В одном из полей прописаны некие коды, например 1.1.2\1.25.1\3.4 где '\' - символ-разделитель кодов. Но вот проблема в том, что эти списки могут присылать кто во что горазд и вместо символа '\' может оказаться любой другой (пробел, запятая и т.д.). Считается, что в пределах импортированных данных символ-разделитель будет один какой-то конкретный. Необходимо после импорта просмотреть все записи из этого поля и определить символы-разделители, то есть любые символы, кроме цифр 0..9 и знака '.'Все остальные символы надо выдать в SELECT в виде символ, количество_раз_сколько_встречается на тот случай, если списки подадут где с запятой, где с пробелом или еще с чем. (Нужно для того, чтобы перед анализом) все эти символы-разделители поместить в комбо-бокс и предложить пользователю самому выбрать символ разделителя (по умолчанию будет тот, что встречается чаще всего, поэтому и нужно сколько раз встречается, чтобы отфильтровать по этому значениюв комбобоксе). |
13 май 13, 11:30 [14286458] Ответить | Цитировать Сообщить модератору |
Александр52 Member Откуда: Кокосовые острова ส็็็็็ Сообщений: 5133 |
nerv, задачка творческая, без уточнений тут вряд ли можно что посоветовать, в ms sql есть replace() - попробуйте с его помощью. |
13 май 13, 11:48 [14286607] Ответить | Цитировать Сообщить модератору |
nerv Member Откуда: Сообщений: 734 |
Александр52, каких уточнений? |
13 май 13, 11:52 [14286636] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И в чем проблема ? Распарсить строку на символы ? Посчитать число симолов по результату парсинга ? |
||
13 май 13, 11:58 [14286682] Ответить | Цитировать Сообщить модератору |
nerv Member Откуда: Сообщений: 734 |
Glory, строк не одна а несколько (заранее не известно) - курсором делать? и как то исключить символы 0..9 и точку надо. |
13 май 13, 12:00 [14286691] Ответить | Цитировать Сообщить модератору |
qwerty112
Guest |
nerv, а "административно" решить вашу задачу не пробовали ? чем "угадывать" какой разделитель он выбирет в след.раз ... - "дурак", он - не предсказуем ... :) |
13 май 13, 12:02 [14286703] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Может apply join-ом, если версия позволяет
Хм. В функции парсинга произвести сравнение текущего символа и в зависимости от результата произвести те или иные действия ? |
||||
13 май 13, 12:02 [14286704] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
declare @t table (i int identity primary key, s varchar(30)); insert into @t values ('1.1.2\1.25.1\3.4'), ('1.1.2,1.25.1,3.4'); select t.s, substring(t.s, d.p, 1) from @t t cross apply (select nullif(patindex('%[^.0-9]%', t.s), 0)) d(p) |
13 май 13, 12:16 [14286813] Ответить | Цитировать Сообщить модератору |
nerv Member Откуда: Сообщений: 734 |
invm, как вариант, спасибо. На SQL 2008 работает (другого под рукой нет, интесует совместимость 2005 - обязательна, 2000 - желательно) Только вот если в одной строке будут два разделителя, например ('1.1.2,1.25.1;3.4'); то в выборку попадет только первый ( |
13 май 13, 12:47 [14287076] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Не проще ли предложить пользователю список всех _разрешенных_ разделителей ? Если уж он отвечает за результат импорта |
13 май 13, 12:55 [14287162] Ответить | Цитировать Сообщить модератору |
angel_zar Member Откуда: Барнаул Сообщений: 902 |
Как то так, можно попробовать, если количество записей не большое |
|
13 май 13, 13:02 [14287212] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
ЗЫ: Пишите табличную CLR-функцию-обертку для Regex.Split и вся станет тривиально: select * from RegexSplit('1.1.2,1.25.1;3.4', '[^.0-9]'); |
||||
13 май 13, 13:09 [14287257] Ответить | Цитировать Сообщить модератору |
nerv Member Откуда: Сообщений: 734 |
invm, пользователь выберет что-то одно. просто потом в мастере импорта на строке 1.4,1.23.3/4.5 программа 1.4 соспоставит (по таблице справочнику кодов), а 1.23.3/4.5 попадет в ошибки и по результата импорта выдаст '1.23.3/4.5 не найдено в справочнике' И дело пользователя решать - либо вручную поправить, либо два кода в итоге не попадут в выборку. |
13 май 13, 13:34 [14287382] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |