|
Программирование >> Преобразование значений null
SQL Server Чтобы расположить символы строк в алфавитном порядке, необходимо обойти все строки и упорядочить их символы: 1 select ename,
8 from ( 9 select e.ename, 10 substring(e.ename,iter.pos,1) as c, 11 row number() over ( 12 partition by e.ename 13 order by substring(e.ename,iter.pos,1)) as pos 14 from emp e, 15 (select row number()over(order by ename) as pos Чтобы возвратить каждую букву каждого имени в отдельной строке, необходимо выполнить обход строки. Это осуществляет вложенный запрос ITER. Теперь, когда буквы всех имен выстроены в алфавитном порядке, осталось опять собрать их вместе в одну строку, сохранив этот порядок. Позиция каждой буквы определяется выражениями CASE (строки 2-7). Если найден символ в определенной позиции, то осуществляется его конкатенация с результатом следующего вычисления (следующего выражения CASE). Благодаря использованию агрегатной функции MAX в каждую позицию POS возвращается только один символ, таким образом, для каждого имени возвращается только одна строка. Вычисление CASE продолжается до числа 6 - максимального количества символов в любом имени таблицы EMP. MySQL Вложенный запрос Х (строки 3-6) возвращает каждый символ каждого имени в отдельной строке. Извлечением символов из имен занимается функция SUBSTR: ENAME C ADAMS A ADAMS A ADAMS D ADAMS M ADAMS S 16 from emp) iter 17 where iter.pos <= len(e.ename) 18 ) x 19 group by ename Обсуждение DB2 и SQL Server Вложенный запрос X возвращает каждый символ каждого имени в отдельной строке. Синтаксический разбор имени осуществляется функцией SUBSTR или SUBSTRING, а функция ROW NUMBER располагает символы в алфавитном порядке: ENAME C POS ADAMS A 1 ADAMS A 2 ADAMS D 3 ADAMS M 4 ADAMS S 5 Следующий шаг - взять выстроенные в алфавитном порядке символы и повторно объединить их в имена. Это выполняет функция SYS CONNECT BY PATH, добавляя каждый последующий символ в конец строки, полученной в результате объединения предыдущих: OLD NAME NEW NAME ADAMS A ADAMS AA ADAMS AAD ADAMS AADM ADAMS AADMS Заключительный шаг - оставить только те строки, длина которых равна длине имен, из которых они были построены. PostgreSQL Для удобства чтения в данном решении используется представление V для обхода строки. Функция SUBSTR в описании представления осуществляет посимвольный разбор каждого имени, так что представление возвращает следующее: ENAME C ADAMS A ADAMS A ADAMS D Вложенный запрос ITER используется для обхода строки. Все остальное выполняет функция GROUP CONCAT. Она не только производит конкатенацию букв, но и располагает их в заданном порядке (в данном случае в алфавитном). Oracle Основную работу осуществляет вложенный запрос Х (строки 5-11), в котором происходит разложение каждого имени на символы и расположение их в алфавитном порядке. Выполняется это путем обхода строки с последующим их упорядочиванием. Остальная часть запроса просто опять объединяет символы в имена. Имена в разложенном виде можно увидеть, выполнив отдельно вложенный запрос X: OLD NAME RN C ADAMS 1 A ADAMS 2 A ADAMS 3 D ADAMS 4 M ADAMS 5 S
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |