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

1 ... 41 42 43 [ 44 ] 45 46 47 ... 219


SMITH800

ALLEN1b00

WARD1250

JONES2975

MARTIN1250

BLAKE2850

CLARK2450

SCOTT3000

KING5000

TURNER1500

ADAMS1100

JAMES950

FORD3000

MILLER1300

Хотелось бы получить такой результат:

ENAME

SMITH

ALLEN

1b00

WARD

1250

JONES

2975

MARTIN

1250

BLAKE

2850

CLARK

2450

SCOTT

3000

KING

5000

TURNER

1500

ADAMS

1100

JAMES

FORD

3000

MILLER

1300

Решение

Чтобы отделить символы от числовых данных, используйте встроенные функции TRANSLATE и REPLACE. Как и в остальных рецептах данной главы, фокус в том, чтобы с помощью функции TRANSLATE

их определенным символом (я использовал а , вы можете указать любой другой символ), а REPLACE затем удаляет все экземпляры этого символа.

Разделение числовых и символьных данных

Задача

Скажем, в одном столбце (к несчастью) хранятся и числовые, и символьные данные. Требуется отделить символьные данные от числовых. Рассмотрим следующее результирующее множество:

DATA



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

Чтобы выбрать и отделить числовые данные от символьных, используйте функции TRANSLATE и REPLACE:

1 select replace(

2 translate(data,0000000000,0123456789),0, ) ename,

3 cast(

4 replace(

5 translate(lower(data),repeat(z,26),

6 abcdefghijklmnopqrstuvwxyz),z,) as integer) sal

7 from (

8 select enamecast(sal as char(4)) data

9 from emp

10 ) x

Oracle

Чтобы выбрать и отделить числовые данные от символьных, используйте функции TRANSLATE и REPLACE:

1 select replace(

2 translate(data,0123456789,0000000000),0) ename,

3 to number(

5 replace(

6 translate(lower(data),

7 abcdefghijklmnopqrstuvwxyz,

8 rpad(z,26,z)),z)) sal

9 from (

10 select enamesal data

11 from emp

12 )

PostgreSQL

Чтобы выбрать и отделить числовые данные от символьных, используйте функции TRANSLATE и REPLACE:

1 select replace(

2 translate(data,0123456789,0000000000),0, ) as ename,

3 cast(

4 replace(

5 translate(lower(data),

6 abcdefghijklmnopqrstuvwxyz,

7 rpad(z,26,z)),z,) as integer) as sal

8 from (

9 select enamesal as data

10 from emp

11 ) x



DATA

SMITH800

zzzzz800

ALLEN1600

zzzzz1600

WARD1250

zzzz1250

JONES2975

zzzzz2975

MARTIN1250

zzzzzz1250

BLAKE2850

zzzzz2850

CLARK2450

zzzzz2450

SCOTT3000

zzzzz3000

KING5000

zzzz5000

TURNER1500

zzzzzz1500

ADAMS1100

zzzzz1100

JAMES950

zzzzz950

FORD3000

zzzz3000

MILLER1300

zzzzzz1300

Функция TRANSLATE заменяет все нечисловые символы строчной Z. Следующий шаг - с помощью REPLACE удалить все экземпляры строчной Z из всех записей, оставляя только числа, которые затем могут быть приведены к числовому типу данных:

select data,

to number( replace( translate(lower(data),

abcdefghijklmnopqrstuvwxyz, rpad(z,26,z)),z)) sal from (select enamesal data from emp)

DATA SAL

SMITH800 800

ALLEN1600 1600

WARD1250 1250

JONES2975 2975

MARTIN1250 1250

BLAKE2850 2850

Обсуждение

Для каждой СУБД синтаксис немного различается, но техника одна. Для обсуждения возьмем решение Oracle. Ключ к решению задачи -выбрать числовые и символьные данные. Для этого подойдут функции TRANSLATE и REPLACE. Чтобы извлечь числовые данные, сначала с помощью TRANSLATE выделим все символьные данные:

select data,

translate(lower(data),

abcdefghijklmnopqrstuvwxyz, rpad(z,26,z)) sal from (select enamesal data from emp)



1 ... 41 42 43 [ 44 ] 45 46 47 ... 219

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