|
Программирование >> Преобразование значений null
Чтобы извлечь нечисловые символы, с помощью TRANSLATE выделим числовые символы: select data, translate(data,0123456789,0000000000) ename from (select enamesal data from emp) DATA ENAME
Функция TRANSLATE заменяет все числовые символы нулями. Следующий шаг - с помощью REPLACE удалить все нули из всех записей, оставляя только нечисловые символы: select data, replace(translate(data,0123456789,0000000000),0) ename from (select enamesal data from emp) DATA ENAME
ADAMS1100 ADAMS JAMES950 JAMES FORD3000 FORD MILLER1300 MILLER Объедините обе техники и получите решение. Как определить, содержит ли строка только буквенно-цифровые данные Задача Требуется извлечь из таблицы строки, в которых в интересующем столбце содержатся только числа или буквы. Рассмотрим следующее представление V (в SQL для конкатенации используется оператор + , а не ): create view V as select ename as data from emp where deptno=10 union all select ename, $ cast(sal as char(4)) .00 as data from emp where deptno=20 union all select ename cast(deptno as char(4)) as data from emp where deptno=30 Представление V представляет вашу таблицу и возвращает следующее: DATA CLARK KING MILLER SMITH, $800.00 JONES, $2975.00 SCOTT, $3000.00 ADAMS, $1100.00 FORD, $3000.00 ALLEN30 WARD30 MARTIN30 BLAKE30 TURNER30 JAMES30 Однако из всех данных представления требуется получить только такие строки: DATA CLARK KING MILLER ALLEN30 WARD30 MARTIN30 BLAKE30 TURNER30 JAMES30 Одним словом, стоит задача выбрать строки, в которых содержатся только буквы или цифры. Решение На первый взгляд, кажется логичным решать задачу через поиск всех символов, не являющихся буквами или числами. Однако, напротив, намного проще сделать прямо противоположное: найти все буквенно-цифровые символы. Для этого всех их можно заменить одним символом и рассматривать как единое целое. Когда есть копия строки, в которой все буквенно-цифровые символы представлены каким-то одним символом по вашему выбору, очень просто отделить буквенно-цифровые символы от всех остальных. С помощью функции TRANSLATE замените все буквенно-цифровые символы каким-то одним символом. Затем выберите строки, в которых, кроме заданного, содержатся и другие символы. Пользователи DB2 обязательно должны вызвать функцию CAST в представлении V; в противном случае представление не будет создано из-за ошибок при преобразовании типов. Приведение к типу CHAR требует особой аккуратности, поскольку это тип фиксированной длины (с дополнением пробелами): 1 select data 2 from V 3 where translate(lower(data), 4 repeat(a,36), 5 0123456789abcdefghijklmnopqrstuvwxyz) = 6 repeat(a,length(data)) MySQL В MySQL синтаксис для получения представления V немного другой: create view V as select ename as data from emp where deptno=10
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |