|
Программирование >> Преобразование значений null
translate(data,0123456789,##########),#) as tmp from V DATA
Затем строки опять попадают в TRANSLATE, но теперь это вторая (самая внешняя) функция TRANSLATE решения. TRANSLATE ведет поиск исходной строки с символами, соответствующими символам в TMP. Если соответствие найдено, то все эти символы также заменяются символами # . Это преобразование позволяет рассматривать все нечисловые символы как один символ (поскольку все они заменяются одним и тем же символом): select data, translate(data, replace( translate(data,0123456789,##########), rpad(#,length(data),#)) as tmp from V DATA
Следующий шаг - удалить все символы # посредством вызова REPLACE (строка 8), оставив только числа: select data, replace( translate(data, replace( translate(data,0123456789,##########), rpad(#,length(data),#)),#) as tmp from V DATA
Наконец, приводим TMP к числовому типу данных (строка 4), используя для этого соответствующую функцию СУБД (часто это функция CAST): select data, to number( replace( translate(data, replace( translate(data,0123456789,##########), rpad(#,length(data),#)),#)) as tmp from V DATA
И последнее замечание: данные представления располагаются в трех столбцах, и только один из них является числовым. Помните, что при наличии нескольких числовых полей они должны быть объединены в одно перед сортировкой строк. Создание списка с разделителями из строк таблицы Задача Требуется представить строки таблицы в виде списка с разделителями, возможно, через запятую, а не через вертикальную черту, как они обычно отображаются. Стоит задача из исходной таблицы: MARTIN 7654 SALES 7654 BLAKE 7698 SALES 7698 TURNER 7844 SALES 7844 JAMES 7900 SALES 7900 При создании подобных запросов полезно располагать используемые выражения в списке SELECT. Тогда можно без труда просматривать промежуточные результаты в ходе продвижения к окончательному решению. Поскольку целью данного рецепта является упорядочивание результатов, в итоге необходимо поместить все вызовы функций в оператор ORDER BY: select data from V order by to number( replace( translate( data, replace( translate( data,0123456789,##########), #),rpad(#,length(data),#)),#))
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |