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

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

Потрібно впорядкувати рядки за останніми двома символами імені:

Упорядкування за числом у рядку

Ключ до рішення – знайти та використовувати вбудовану функцію СУБД для вилучення підрядка, за якою потрібно провести сортування! ку. Зазвичай цю операцію виконує SUBSTR.

DB2, Oracle, MySQL та PostgreSQL

Щоб сортувати рядки за певною частиною рядка, використовуйте поєднання вбудованих функцій LENGTH та SUBSTR:

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

Щоб сортувати рядки за певною частиною рядка, використовуйте функції SUBSTRING та LEN:

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

від emp e, dept d where e.deptno=d.deptno

156 Розділ 6. Робота з рядками

Це подання повертає такі дані:

Необхідно впорядкувати результати за номером службовця, який розташовується між ім'ям службовця та назвою відповідаю! ного відділу:

У кожному рішенні використовуються функції і синтаксис, характерні для тієї чи іншої СУБД, але методика (застосування вбудованих функцій REPLACE і TRANSLATE) у всіх випадках одна і та ж. Суть у тому, щоб зза допомогою REPLACE та TRANSLATE видалити з рядків символи, що не є цифрами, залишивши лише числові значе! ня, за якими і провести сортування.

Щоб упорядкувати результуючу множину за числовими символами рядка, використовуйте вбудовані функції REPLACE та TRANSLATE:

Упорядкування за числом у рядку

Щоб упорядкувати результуючу множину за числовими символами рядка, використовуйте вбудовані функції REPLACE та TRANSLATE:

Щоб упорядкувати результуючу множину за числовими символами рядка, використовуйте вбудовані функції REPLACE та TRANSLATE:

MySQL та SQL Server

На момент написання цієї книги жоден з даних робите! лей не підтримує функцію TRANSLATE.

Єдине призначення уявлення V – надання рядків для демонстрації рішення цього рецепта. Це уявлення про! сто поєднує кілька стовпців таблиці EMP. У рішеннях показу! але, як сортувати такі об'єднані текстові дані з входу! ному в них номеру службовця.

Глава 6. Робота з рядками

Оператор ORDER BY, що використовується в рішеннях, можливо, виглядає трохи жахливо, але він чудово працює і стає досить зрозумілим, якщо розібрати його частинами. Щоб провести сортування за числами, що входять до рядка, найпростіше видалити з рядка все це! воли, які є числами. Як тільки нечислові символи будуть видалені, залишиться лише привести рядок чисел до числового типу даних і сортувати, як завгодно. Перш ніж аналізувати кожну функцію, важливо зрозуміти порядок їхнього виклику. Починаючи з самого! го внутрішнього виклику, функції TRANSLATE (рядок 8 у всіх рішеннях), ми бачимо, що:

1. Викликається TRANSLATE (рядок 8) і результати повертаються в

2. REPLACE (рядок 7), результати її виконанняповертаються в

3. TRANSLATE (рядок 6), результати її виконання повертаються в

4. REPLACE (рядок 5), результати її виконання повертаються і нарешті!

5. наводяться до числового типу даних.

Перший крок – перетворити числа на символи, яких немає у рядку. Для цього прикладу я вибрав символ «#» і використав функцію TRANSLATE, щоб замінити їм усі числові символи. Після ви! виконання наступного запиту, наприклад, можна побачити зліва вихід! ні дані, а праворуч результати першої підстановки:

translate(data,'0123456789','##########') as tmp