powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка в SQL
19 сообщений из 19, страница 1 из 1
Сортировка в SQL
    #39726732
Aleksandr280995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!
Помогите пожалуйста.
Есть табличка id (например):
3.14.1
3.14.10
3.14.11
3.14.2
3.15.10.11
3.15.10.5
3.15.2.3
Выше представлена сортировка в SQL а нужно примерно вот так:
3.14.1
3.14.2
3.14.10
3.14.11
3.15.2.3
3.15.10.5
3.15.10.11

Уже всю голову сломал((
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39726733
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормализуйте данные, дополнив компоненты поля ведущими нулями. Как вариант - напишите пользовательскую функцию, выполняющую такое преобразование, или дополните структуру вычисляемым полем (которое и проиндексировать можно, кстати).
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39726746
Aleksandr280995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Вы имеете ввиду следующее: order by '0'+id
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39726921
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr280995Akina,
Вы имеете ввиду следующее: order by '0'+id

Имеется ввиду что нужно для каждого уровня ведущий нуль, тогда сортировка будет правильная:

3.14.01
3.14.02
3.14.10
3.14.11
3.15.02.03
3.15.10.05
3.15.10.11
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39726961
Aleksandr280995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Близнец1980,Добрый день!
А не подскажите как это сделать, я просто новичок в SQL да и вообще в программировании
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39727015
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr280995как это сделать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DROP FUNCTION IF EXISTS Normalize;

DELIMITER @@;

CREATE FUNCTION Normalize (val VARCHAR(255), delim CHAR(1), len INT)
RETURNS VARCHAR(255) DETERMINISTIC
BEGIN
	DECLARE Result VARCHAR(255) DEFAULT '';
	DECLARE Temp VARCHAR(255) DEFAULT '';
    WHILE val != '' DO
		SET Temp := SUBSTRING_INDEX(val, delim, 1);
		SET val := SUBSTRING(val FROM 2 + LENGTH(Temp));
		SET Result := CONCAT(Result, delim, REPEAT('0', len - LENGTH(Temp)), Temp);
	END WHILE;
	RETURN TRIM(LEADING delim FROM Result);
END;
@@;

DELIMITER ;


Код: sql
1.
2.
UPDATE data_table
SET id = Normalize(id, '.', 2);
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39727019
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или просто
Код: sql
1.
2.
3.
SELECT *
FROM table
ORDER BY Normalize(id, '.', 2);
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39729537
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr280995,

Поменяйте точки на нули, а потом переведите в число. Собственно в результате будут 2 колонки - оригинальная и новая, по которой отсортированно.
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39729719
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAPA3OTПоменяйте точки на нули, а потом переведите в число.Покажите в коде - потому как в строго описанном варианте предложенная замена не изменит ничего. Код точки меньше кода нуля.
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730123
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Каждый ява-программист хитрый садо-мазохист...
Код: sql
1.
SELECT * from t_table order by CONVERT(REPLACE(some_field, '.', '0') SIGNED INTEGER);
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730126
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAPA3OT,

что больше
3.16.11
3.15.02.03

3016011 vs 3015002003
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730129
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAPA3OT,
с таким же успехом можно просто удалить точки
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730142
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда уж так
Код: sql
1.
SELECT x  from test.table1  order BY CONVERT( RPAD(REPLACE(x, '.', ''),10,'0'),UNSIGNED integer) ;
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730148
MAPA3OT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Хм, вы правы, но если использовать RPAD, подравнивая девятками, то сортируя в обратном порядке всё может получиться.
*У меня искренняя ненависть к функциям и триггерам, причём небезосновательная.
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730156
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAPA3OT,
замена точек на нули приведёт только к увеличению разрядности числа.
девятки - странная логика...
вот добавить лидирующие нули через regexp - вот это было бы интересно
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730278
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадядобавить лидирующие нули через regexpДля этого нужен сервер версии 8+.
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730280
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAPA3OTКаждый ява-программист хитрый садо-мазохист...
Код: sql
1.
SELECT * from t_table order by CONVERT(REPLACE(some_field, '.', '0') SIGNED INTEGER);


Ну ты хотя бы сначала пробуй, а потом публикуй... ни хрена ж не работает как надо автору вопроса...

вадятогда уж так
Код: sql
1.
SELECT x  from test.table1  order BY CONVERT( RPAD(REPLACE(x, '.', ''),10,'0'),UNSIGNED integer) ;

То же самое, один в один.
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730300
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

я то попробовал, вот для этого
3.16.11
3.15.02.03
единственно, что добавлены лидирующие нули вручную.
...
Рейтинг: 0 / 0
Сортировка в SQL
    #39730322
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя то попробовал, вот для этогоДля ЭТОГО вообще никакие телодвижения не нужны.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка в SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]