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

1 ... 45 46 47 [ 48 ] 49 50 51 ... 219


S##### G######

На данном этапе инициалы - это символы, отличные от #. С помощью функции REPLACE удаляются все символы #:

select replace(

translate(replace(Stewie Griffin,.,), abcdefghijklmnopqrstuvwxyz, rpad(#,26,#)),#,)

from t1

Следующий шаг - заменить пробелы точками опять же с помощью

функции REPLACE:

select replace( replace(

translate(replace(Stewie Griffin,.,), abcdefghijklmnopqrstuvwxyz, rpad(#,26,#) ),#,), ,.) .

from t1

REPLA

Завершающий шаг - поставить точку в конце.

MySQL

Для удаления точек из имени используется вложенный запрос Y. Вложенный запрос Х находит число пробелов в имени, чтобы определить, сколько раз необходимо вызвать функцию SUBSTR для извлечения инициалов. В результате трехкратного вызова SUBSTRINGINDEX строка имени разбивается на составляющие соответственно местоположению пробелов. Поскольку имя состоит только из имени и фамилии, выполняется код конструкции ELSE выражения CASE:

select substr(substring index(name, ,1),1,1) as a, substr(substring index(name, as b

from (select Stewie Griffin as name from t1) x

A B S G

Если в рассматриваемом имени есть отчество или второй инициал, то соответствующий инициал будет возвращен за счет выполнения выражения

substr(name,length(substring index(name, ,1))+2,1)



которое находит конец имени, перемещается на две позиции на начало отчества или второго инициала, т. е. находит начальную позицию для SUBSTR. Поскольку выбирается только один символ, мы получаем инициал, соответствующий отчеству, или второй инициал. После этого инициалы передаются в функцию CONCAT WS, которая разделяет их точками:

select concat ws(.,

substr(substring index(name, ,1),1,1), substr(substring index(name, . ) a

from (select Stewie Griffin as name from t1) x

S.G..

Последний шаг - убрать из инициалов лишнюю точку.

Упорядочивание по частям строки Задача

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

ENAME

SMITH

ALLEN

WARD

JONES

MARTIN

BLAKE

CLARK

SCOTT

KING

TURNER

ADAMS

JAMES

FORD

MILLER

Требуется упорядочить строки по последним двум символам имени:

ENAME

ALLEN

TURNER

MILLER

JONES

JAMES

MARTIN

BLAKE



ADAMS

KING WARD

FORD

CLARK SMITH SCOTT

Решение

Ключ к решению - найти и использовать встроенную функцию СУБД для извлечения подстроки, по которой требуется провести сортировку. Обычно эту операцию выполняет функция SUBSTR.

DB2, Oracle, MySQL и PostgreSQL

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

1 select ename

2 from emp

3 order by substr(ename,length(ename)-1,2)

SQL Server

Чтобы сортировать строки по определенной части строки, используйте

функции SUBSTRING и LEN:

1 select ename

2 from emp

3 order by substring(ename,len(ename)-1,2)

Обсуждение

Применяя выражение SUBSTR в конструкции ORDER BY, в качестве параметра сортировки результирующего множества можно выбирать любую часть строки. Кроме того, вы не ограничены только функцией SUBSTR. Упорядочивать строки можно по результату практически любого выражения.

Упорядочивание по числу в строке Задача

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

create view V as select e.ename

cast(e.empno as char(4)) d.dname as data from emp e, dept d where e.deptno=d.deptno



1 ... 45 46 47 [ 48 ] 49 50 51 ... 219

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