|
Программирование >> Преобразование значений null
Это представление возвращает следующие данные: DATA
Необходимо упорядочить результаты по номеру служащего, который располагается между именем служащего и названием соответствую-
Решение В каждом решении используются функции и синтаксис, характерные для той или иной СУБД, но методика (применение встроенных функций REPLACE и TRANSLATE) во всех случаях одна и та же. Суть в том, чтобы с помощью REPLACE и TRANSLATE удалить из строк символы, не являющиеся цифрами, оставив только числовые значения, по которым и провести сортировку. Чтобы упорядочить результирующее множество по числовым символам строки, используйте встроенные функции REPLACE и TRANSLATE: Обсуждение Единственное назначение представления V - предоставление строк для демонстрации решения данного рецепта. Это представление просто объединяет несколько столбцов таблицы EMP. В решениях показано, как сортировать такие объединенные текстовые данные по входящему в них номеру служащего. 1 select data 2 from V 3 order by 4 cast( 5 replace( 6 translate(data,repeat(#,length(data)), 7 replace( 8 translate(data,##########,0123456789), 9 #,)),#,) as integer) Oracle Чтобы упорядочить результирующее множество по числовым символам строки, используйте встроенные функции REPLACE и TRANSLATE: 1 select data 2 from V 3 order by 4 to number( 5 replace( 6 translate(data, 7 replace( 8 translate(data,0123456789,##########), 9 #), rpad(#,20,#)),#)) PostgreSQL Чтобы упорядочить результирующее множество по числовым символам строки, используйте встроенные функции REPLACE и TRANSLATE: 1 select data 2 from V 3 order by 4 cast( 5 replace( 6 translate(data, 7 replace( 8 translate(data,0123456789,##########), 9 #,),rpad(#,20,#)),#,) as integer) MySQL и SQL Server На момент написания данной книги ни один из данных производителей не поддерживает функцию TRANSLATE. Используемый в решениях оператор ORDER BY, возможно, выглядит немного устрашающе, но он прекрасно работает и становится довольно понятным, если разобрать его по частям. Чтобы провести сортировку по числам, входящим в строку, проще всего удалить из строки все символы, не являющиеся числами. Как только нечисловые символы будут удалены, останется лишь привести строку чисел к числовому типу данных и сортировать, как душе угодно. Прежде чем анализировать каждую функцию, важно понять порядок их вызова. Начиная с самого внутреннего вызова, функции TRANSLATE (строка 8 во всех решениях), мы видим, что: 1. Вызывается TRANSLATE (строка 8) и результаты возвращаются в 2. REPLACE (строка 7), результаты ее выполнения возвращаются в 3. TRANSLATE (строка 6), результаты ее выполнения возвращаются в 4. REPLACE (строка 5), результаты ее выполнения возвращаются и наконец-то 5. приводятся к числовому типу данных. Первый шаг - преобразовать числа в символы, которых нет в строке. Для данного примера я выбрал символ # и использовал функцию TRANSLATE, чтобы заменить им все числовые символы. После выполнения следующего запроса, например, можно увидеть слева исходные данные, а справа результаты первой подстановки: select data, translate(data,0123456789,##########) as tmp from V
# . После этого измененные строки возвращаются в REPLACE (строка 11), которая удаляет все экземпляры # : select data, replace(
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |