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

1 ... 47 48 49 [ 50 ] 51 52 53 ... 219


translate(data,0123456789,##########),#) as tmp from V

DATA

CLARK

7782

ACCOUNTING

CLARK

ACCOUNTING

KING

7839

ACCOUNTING

KING

ACCOUNTING

MILLER

7934

ACCOUNTING

MILLER

ACCOUNTING

SMITH

7369

RESEARCH

SMITH

RESEARCH

JONES

7566

RESEARCH

JONES

RESEARCH

SCOTT

7788

RESEARCH

SCOTT

RESEARCH

ADAMS

7876

RESEARCH

ADAMS

RESEARCH

FORD

7902

RESEARCH

FORD

RESEARCH

ALLEN

7499

SALES

ALLEN

SALES

WARD

7521

SALES

WARD

SALES

MARTIN

7654

SALES

MARTIN

SALES

BLAKE

7698

SALES

BLAKE

SALES

TURNER

7844

SALES

TURNER

SALES

JAMES

7900

SALES

JAMES

SALES

Затем строки опять попадают в TRANSLATE, но теперь это вторая (самая внешняя) функция TRANSLATE решения. TRANSLATE ведет поиск исходной строки с символами, соответствующими символам в TMP. Если соответствие найдено, то все эти символы также заменяются символами # . Это преобразование позволяет рассматривать все нечисловые символы как один символ (поскольку все они заменяются одним и тем же символом):

select data, translate(data, replace(

translate(data,0123456789,##########),

rpad(#,length(data),#)) as tmp

from V

DATA

CLARK

7782

ACCOUNTING

########7782###########

KING

7839

ACCOUNTING

########7839###########

MILLER

7934

ACCOUNTING

########7934###########

SMITH

7369

RESEARCH

########7369#########

JONES

7566

RESEARCH

########7566#########

SCOTT

7788

RESEARCH

########7788#########

ADAMS

7876

RESEARCH

########7876#########

FORD

7902

RESEARCH

########7902#########

ALLEN

7499

SALES

########7499######

WARD

7521

SALES

########7521######

MARTIN

7654

SALES

########7654######

BLAKE

7698

SALES

########7698######

TURNER

7844

SALES

########7844######

JAMES

7900

SALES

########7900######



Следующий шаг - удалить все символы # посредством вызова REPLACE (строка 8), оставив только числа:

select data, replace(

translate(data, replace(

translate(data,0123456789,##########),

rpad(#,length(data),#)),#) as tmp

from V

DATA

CLARK

7782

ACCOUNTING

7782

KING

7839

ACCOUNTING

7839

MILLER

7934

ACCOUNTING

7934

SMITH

7369

RESEARCH

7369

JONES

7566

RESEARCH

7566

SCOTT

7788

RESEARCH

7788

ADAMS

7876

RESEARCH

7876

FORD

7902

RESEARCH

7902

ALLEN

7499

SALES

7499

WARD

7521

SALES

7521

MARTIN

7654

SALES

7654

BLAKE

7698

SALES

7698

TURNER

7844

SALES

7844

JAMES

7900

SALES

7900

Наконец, приводим TMP к числовому типу данных (строка 4), используя для этого соответствующую функцию СУБД (часто это функция

CAST):

select data, to number( replace( translate(data, replace(

translate(data,0123456789,##########),

rpad(#,length(data),#)),#)) as tmp

from V

DATA

CLARK

7782

ACCOUNTING

7782

KING

7839

ACCOUNTING

7839

MILLER

7934

ACCOUNTING

7934

SMITH

7369

RESEARCH

7369

JONES

7566

RESEARCH

7566

SCOTT

7788

RESEARCH

7788

ADAMS

7876

RESEARCH

7876

FORD

7902

RESEARCH

7902

ALLEN

7499

SALES

7499

WARD

7521

SALES

7521



DATA

SMITH

7369

RESEARCH

ALLEN

7499

SALES

WARD

7521

SALES

JONES

7566

RESEARCH

MARTIN

7654

SALES

BLAKE

7698

SALES

CLARK

7782

ACCOUNTING

SCOTT

7788

RESEARCH

KING

7839

ACCOUNTING

TURNER

7844

SALES

ADAMS

7876

RESEARCH

JAMES

7900

SALES

FORD

7902

RESEARCH

MILLER

7934

ACCOUNTING

И последнее замечание: данные представления располагаются в трех столбцах, и только один из них является числовым. Помните, что при наличии нескольких числовых полей они должны быть объединены в одно перед сортировкой строк.

Создание списка с разделителями из строк таблицы Задача

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

MARTIN 7654 SALES 7654

BLAKE 7698 SALES 7698

TURNER 7844 SALES 7844

JAMES 7900 SALES 7900

При создании подобных запросов полезно располагать используемые выражения в списке SELECT. Тогда можно без труда просматривать промежуточные результаты в ходе продвижения к окончательному решению. Поскольку целью данного рецепта является упорядочивание результатов, в итоге необходимо поместить все вызовы функций в оператор ORDER BY:

select data from V order by

to number( replace( translate( data, replace(

translate( data,0123456789,##########),

#),rpad(#,length(data),#)),#))



1 ... 47 48 49 [ 50 ] 51 52 53 ... 219

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