|
Программирование >> Преобразование значений null
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |