|
Программирование >> Преобразование значений null
SMITH800 ALLEN1b00 WARD1250 JONES2975 MARTIN1250 BLAKE2850 CLARK2450 SCOTT3000 KING5000 TURNER1500 ADAMS1100 JAMES950 FORD3000 MILLER1300 Хотелось бы получить такой результат:
Решение Чтобы отделить символы от числовых данных, используйте встроенные функции 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
Функция 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)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |