|
Программирование >> Преобразование значений null
Теперь каждый символ строки может обрабатываться индивидуально. Следующий шаг - выбрать только строки, содержащие число в столбце С: select v.mixed, iter.pos, substr(v.mixed,iter.pos,1) as c from V, ( select id pos from t10 ) iter where iter.pos <= length(v.mixed) and ascii(substr(v.mixed,iter.pos,1)) between 48 and 57 order by 1,2 mixed pos c 77336699 CL10AR CL10AR 1 7 2 3 3 6 4 9 34 01 На этом этапе в столбце С находятся только числа. Следующий шаг -с помощью функции GROUP CONCAT выполнить конкатенацию чисел и получить соответствующие значениям столбца MIXED целые числа. Полученный результат приводится к числовому типу: select cast(group concat(c order by pos separator ) as unsigned) as MIXED1 from ( select v.mixed, iter.pos, substr(v.mixed,iter.pos,1) as c from V, ( select id pos from t10 ) iter where iter.pos <= length(v.mixed) and ascii(substr(x.mixed,iter.pos,1)) between 48 and 57 ) y mo,larry,curly tina,gina,]aunita, regina,leena Из каждой строки необходимо выбрать второе имя. Результирующее множество должно быть таким: larry gina group by mixed order by 1 +--------+ MIXED1 +--------+ 10 10 10 7369 7566 7876 7902 +--------+ И последнее замечание - помните, что конкатенации подвергаются все цифры строки, и в результате получается одно числовое значение. Например, возьмем исходное значение 99Gennick87 . В результате будет получено значение 9987. Об этом следует помнить, особенно при работе с сериализованными данными. Извлечение n-ной подстроки с разделителями Задача Требуется извлечь из строки заданную подстроку с разделителями. Рассмотрим следующее представление V, формирующее исходные данные для этой задачи: create view V as select mo,larry,curly as name from t1 union all select tina,gina,]aunita,regina,leena as name from t1 В результате получаем следующее: select * from v NAME
После обхода значений столбца NAME, возвращенных представлением V, выбираем из каждой строки второе имя, ориентируясь на позиции запятых: 1 select name 2 from ( 3 select iter.pos, 4 substring index( 5 substring index(src.name ,iter.pos) ,-1) name 6 from V src, 7 (select id pos from t10) iter, 8 where iter.pos <= 9 length(src.name)-length(replace(src.name ,)) 10 ) x 11 where pos = 2 Oracle После обхода значений столбца NAME, возвращенных представлением V, второе имя каждого списка извлекаем с помощью функций SUB- STR и INSTR: Решение Суть решения данной задачи - возвратить каждое имя в отдельной строке, сохраняя порядок, в котором имена представлены в списке. Конкретная реализация этого зависит от используемой СУБД. После обхода значений столбца NAME, возвращенных представлением V, с помощью функции ROW NUMBER выбираем только второе имя каждой строки:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |