Программирование >>  Преобразование значений null 

1 ... 56 57 58 [ 59 ] 60 61 62 ... 219


7369

9

ALLEN

A

ALLEN

L

ALLEN

L

ALLEN

E

ALLEN

N

CL10AR

C

CL10AR

L

CL10AR

1

CL10AR

0

CL10AR

A

CL10AR

R

+ + + +

Теперь каждый символ строки может обрабатываться индивидуально. Следующий шаг - выбрать только строки, содержащие число в столбце С:

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



select

substr(c,2,locate( c,2)-2)

from

select

pos, name, substr(name, pos) c,

row number() over(partition by name

order by length(substr(name,pos))

from

select

, И csv.name И , as name,

cast(iter.pos as integer) as pos

from

V csv,

(select row number() over() pos from t100 ) iter

where

iter.pos <= length(csv.name)+2

) x

where

length(substr(name,pos)) > 1

substr(substr(name,pos),1,1) = ,

where

rn = 2

MySQL

После обхода значений столбца 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 выбираем только второе имя каждой строки:



1 ... 56 57 58 [ 59 ] 60 61 62 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика