С Новым годом! Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/32: Рейтинг темы: голосов - 32, средняя оценка - 4.94
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69

Сортировка таблицы за столбиком данных по возрастанию, если они в формате текста

18.10.2012, 19:00. Показов 6099. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с такой проблемой, ничего не получается. Крик помощи так сказать!

select * from cls_event order by cls_event_id

Вроде бы все понятно. Но проблема вот в чем:
А) Данные столбца cls_event_id текстовые, и Б) Они с точками, то есть, допустим значение "1.03" - это текст.
Конвертирую текст в число - все ок, а вот конвертирую точку - ничего не получается.

Задача в том, что бы в 1-ом запросе сделать эту сортировку по возрастанию.

Если не сложно, выложите готовый запрос. Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2012, 19:00
Ответы с готовыми решениями:

Удвоить числа, если они упорядочены по возрастанию
Дано действительные числа a, b и c. Удвоить эти числа, если они упорядочены по возрастанию. Помогите пожалуйста!

Удвоить эти числа,если они являются упорядоченными по возрастанию
Даны действительные числа a,b,c.Удвойте эти числа,если они являются упорядоченными по возрастанию( Условие.(a<b ) и (b,c) Добавлено...

Как объединить 2 таблицы если они разные?
у меня в одной таблицы клиенты в другой таблицы лишь здания как их объединить без всяких условий? чтоб к клиенту было привязано 1...

50
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
18.10.2012, 20:28
А для Вас точка это какое число? Как вы ее сортировать хотите?
SQL
1
2
3
4
5
6
7
8
9
WITH t(val) AS
(
  SELECT '0'      FROM dual UNION ALL
  SELECT '0.1'    FROM dual UNION ALL
  SELECT '1'      FROM dual UNION ALL
  SELECT '3'      FROM dual UNION ALL
  SELECT '2.377'  FROM dual
)
SELECT to_number(t.val, '999.999') FROM t;
1
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 10:31
К слову сказать, если ВСЕ значения поля - числовые, то хранить их в поле типа varchar2 - пример плохого проектирования БД. Ибо постоянно нужны преобразования.
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 12:16  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
К слову сказать, если ВСЕ значения поля - числовые, то хранить их в поле типа varchar2 - пример плохого проектирования БД. Ибо постоянно нужны преобразования.
Даже новичком в этой сфере программирования я такого бы не сделал. Таковы входные данные "свыше"

Добавлено через 9 минут
Что то не получается.

Напишите плз запрос именно для моих даных:

таблица cls_event
столбики:
1)cls_event_id (текстовая, которую надо преобразовать в числовую)
2)cls_event_name

Спасибо.

Добавлено через 37 минут
Цитата Сообщение от HarryFranc Посмотреть сообщение
Даже новичком в этой сфере программирования я такого бы не сделал. Таковы входные данные "свыше"

Добавлено через 9 минут
Что то не получается.

Напишите плз запрос именно для моих даных:

таблица cls_event
столбики:
1)cls_event_id (текстовая, которую надо преобразовать в числовую)
2)cls_event_name

Спасибо.

Так, все. Забыли.

Все реализовано вот так:

Кликните здесь для просмотра всего текста
select * from cls_event order by to_number(replace(cls_event_id,'.',','))


Но это только для преобразования точки в запятую.

Проблема в том, что на разных компьютерах десятичный разделитель разный. Он может быть как запятой, так и точкой.

Вопрос в следующем: Как сделать универсальный запрос? Спасибо.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 12:26
Цитата Сообщение от HarryFranc
Проблема в том, что на разных компьютерах десятичный разделитель разный. Он может быть как запятой, так и точкой.
Вопрос в следующем: Как сделать универсальный запрос? Спасибо.
В БД какой разделитель? Всегда точки или м.б. и запятые?
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 12:41  [ТС]
в бд всегда точки.

Добавлено через 2 минуты
Порылся тут: http://kochetov.org.ua/2012/02... buffering/

Заменяю ',' на 'D' - все равно не хочет...
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 12:51
Цитата Сообщение от HarryFranc Посмотреть сообщение
в бд всегда точки.
Заменяю ',' на '99D99' - все равно не хочет...
Если всегда точки, то то, что тебе подсказали
SQL
1
to_number(t.val, '999.999')
будет работать независимо от NLS-настроек сессии.

Попробуй:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT *
FROM nls_session_parameters
 
 
-- при разных настройках
ALTER SESSION SET nls_numeric_characters=',.'
 
SELECT to_number('123.456', '999.999')
FROM dual
 
ALTER SESSION SET nls_numeric_characters='.,'
 
SELECT to_number('123.456', '999.999')
FROM dual
А вот D берет десятичный разделитель именно из настроек сессии.
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 13:05  [ТС]
А можете написать именно для моего случая, я новичек, преобразовать код для своего случая - сложновато.

таблица cls_event
столбики:
1)cls_event_id (текстовая, которую надо преобразовать в числовую)
2)cls_event_name
Сортировка по возрастанию за преобразованным столбиком cls_event_id

ЗЫ: я пока слаб еще в синтаксисе sql oracle
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 13:17
SQL
1
2
3
SELECT cls_event_id, cls_event_name
FROM cls_event
ORDER BY to_number(cls_event_id, '999999.999')
Кол. девяток перед точкой зависит от макс. числа в колонке
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 13:24  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
SQL
1
2
3
SELECT cls_event_id, cls_event_name
FROM cls_event
ORDER BY to_number(cls_event_id, '999999.999')
Кол. девяток перед точкой зависит от макс. числа в колонке
ORA-01722: неверное число
01722. 00000 - "invalid number"
*Cause:
*Action:
не то
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
19.10.2012, 13:25
HarryFranc, строку или данные покажите, на которых слетает ошибка. Возможно больше знаков, чем в шаблоне, до или после запятой.
1
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 13:30
1. покажи
SQL
1
2
SELECT *
FROM nls_session_parameters
2. похоже, что в колонке не только точки
SQL
1
2
3
SELECT COUNT(*)
FROM cls_event
WHERE INSTR(cls_event_id, ',') > 0
Правда это покажет только наличие запятых, а если там вообще не число, надо искать отдельно
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 13:32  [ТС]
0
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 13:36  [ТС]
NLS_LANGUAGE RUSSIAN
NLS_TERRITORY RUSSIA
NLS_CURRENCY р.
NLS_ISO_CURRENCY RUSSIA
NLS_NUMERIC_CHARACTERS ,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD.MM.RR
NLS_DATE_LANGUAGE RUSSIAN
NLS_SORT RUSSIAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY р.
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

Добавлено через 2 минуты
Цитата Сообщение от Grossmeister Посмотреть сообщение
1. покажи
SELECT *
FROM nls_session_parameters
NLS_LANGUAGE RUSSIAN
NLS_TERRITORY RUSSIA
NLS_CURRENCY р.
NLS_ISO_CURRENCY RUSSIA
NLS_NUMERIC_CHARACTERS ,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD.MM.RR
NLS_DATE_LANGUAGE RUSSIAN
NLS_SORT RUSSIAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY р.
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
0
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 13:38  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
SQL
1
2
3
SELECT COUNT(*)
FROM cls_event
WHERE INSTR(cls_event_id, ',') > 0
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 13:47
Версия Oracle?
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 13:51  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Версия Oracle?

да, а что?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 14:21
Какая версия СУБД Oracle?
И заодно, сколько строк в cls_event?
1
2 / 2 / 2
Регистрация: 16.10.2012
Сообщений: 69
19.10.2012, 14:42  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Какая версия СУБД Oracle?
И заодно, сколько строк в cls_event?
строк 74,
11G
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
19.10.2012, 14:54
Цитата Сообщение от HarryFranc
строк 74
11G
Ну, если строк мало, то со всякими регулярными выражениями можно не заморачиваться
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE
  v_Dummy   NUMBER;
 
  CURSOR C1
  IS
  SELECT *
  FROM cls_event;
BEGIN
  FOR R1 IN C1 LOOP
 
     BEGIN
       v_Dummy:= TO_NUMBER(R1.cls_event_id, '999999.999');
 
     EXCEPTION
        WHEN OTHERS THEN
            dbms_output.put_number(R1.cls_event_id);
     END;
  END LOOP;
END;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2012, 14:54
Помогаю со студенческими работами здесь

Какое место число занимает в существующем ряду введенных чисел, если бы они были отсортированы по возрастанию?
Суть в следующем: С клавиатуры вводится большое количество чисел (их может быть несколько десятков тысяч) Вводятся они в не...

Сортировка текста по возрастанию
2. Написать программу, которая дает пользователю ввести 5 фамилий студентов, а затем сортирует их по возрастанию. 3. Аналогично, но...

Как вытащить значение одной таблицы из другой, если они связаны?
Здравствуйте, выполняю http://172.20.195.14/GO/index.php/edu/15-wop/27-wop-tasks работу, всё сделал, но на 16 странице внизу, сказано...

Сортировка таблицы умножения по возрастанию
Здравствуйте! Подскажите, как сделать сортировку таблицы умножения во возрастанию и вывести ее для наглядности в строку? Создать и вывести...

Упорядочить одномерный числовой массив методом по возрастанию обменов. При этом сравниваются два соседних элемента массива, и если они не упорядочены,
Упорядочить одномерный числовой массив методом по возрастанию обменов. При этом сравниваются два соседних элемента массива, и если они не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru