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

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


CLARK2450

2450

SCOTT3000

3000

KING5000

5000

TURNER1500

1500

ADAMS1100

1100

JAMES950

FORD3000

3000

MILLER1300

1300

Чтобы извлечь нечисловые символы, с помощью TRANSLATE выделим числовые символы:

select data,

translate(data,0123456789,0000000000) ename from (select enamesal data from emp)

DATA

ENAME

SMITH800

SMITH000

ALLEN1600

ALLEN0000

WARD1250

WARD0000

JONES2975

JONES0000

MARTIN1250

MARTIN0000

BLAKE2850

BLAKE0000

CLARK2450

CLARK0000

SCOTT3000

SCOTT0000

KING5000

KING0000

TURNER1500

TURNER0000

ADAMS1100

ADAMS0000

JAMES950

JAMES000

FORD3000

FORD0000

MILLER1300

MILLER0000

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

select data,

replace(translate(data,0123456789,0000000000),0) ename from (select enamesal data from emp)

DATA

ENAME

SMITH800

SMITH

ALLEN1600

ALLEN

WARD1250

WARD

JONES2975

JONES

MARTIN1250

MARTIN

BLAKE2850

BLAKE

CLARK2450

CLARK

SCOTT3000

SCOTT

KING5000

KING

TURNER1500

TURNER



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



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

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