Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Сортировка в SQL  [new]
Aleksandr280995
Member

Откуда:
Сообщений: 6
Всем доброго времени суток!
Помогите пожалуйста.
Есть табличка 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

Уже всю голову сломал((
1 ноя 18, 16:47    [21721763]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
Нормализуйте данные, дополнив компоненты поля ведущими нулями. Как вариант - напишите пользовательскую функцию, выполняющую такое преобразование, или дополните структуру вычисляемым полем (которое и проиндексировать можно, кстати).
1 ноя 18, 16:50    [21721764]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Aleksandr280995
Member

Откуда:
Сообщений: 6
Akina,
Вы имеете ввиду следующее: order by '0'+id
1 ноя 18, 17:15    [21721785]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Близнец1980
Member

Откуда:
Сообщений: 65
Aleksandr280995
Akina,
Вы имеете ввиду следующее: 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
2 ноя 18, 07:13    [21722080]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Aleksandr280995
Member

Откуда:
Сообщений: 6
Близнец1980,Добрый день!
А не подскажите как это сделать, я просто новичок в SQL да и вообще в программировании
2 ноя 18, 09:20    [21722140]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
Aleksandr280995
как это сделать

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 ;

UPDATE data_table
SET id = Normalize(id, '.', 2);
2 ноя 18, 10:16    [21722204]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
Или просто
SELECT *
FROM table
ORDER BY Normalize(id, '.', 2);
2 ноя 18, 10:19    [21722209]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
MAPA3OT
Member

Откуда: Над трубами, во чреве коих Яуза живет.
Сообщений: 2608
Aleksandr280995,

Поменяйте точки на нули, а потом переведите в число. Собственно в результате будут 2 колонки - оригинальная и новая, по которой отсортированно.
7 ноя 18, 19:27    [21727291]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
MAPA3OT
Поменяйте точки на нули, а потом переведите в число.
Покажите в коде - потому как в строго описанном варианте предложенная замена не изменит ничего. Код точки меньше кода нуля.
8 ноя 18, 07:41    [21727643]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
MAPA3OT
Member

Откуда: Над трубами, во чреве коих Яуза живет.
Сообщений: 2608
Akina,

Каждый ява-программист хитрый садо-мазохист...
SELECT * from t_table order by CONVERT(REPLACE(some_field, '.', '0') SIGNED INTEGER);
8 ноя 18, 20:48    [21728716]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14693
MAPA3OT,

что больше
3.16.11
3.15.02.03

3016011 vs 3015002003
8 ноя 18, 21:18    [21728738]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14693
MAPA3OT,
с таким же успехом можно просто удалить точки
8 ноя 18, 21:20    [21728743]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14693
тогда уж так
SELECT x  from test.table1  order BY CONVERT( RPAD(REPLACE(x, '.', ''),10,'0'),UNSIGNED integer) ;
8 ноя 18, 21:37    [21728766]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
MAPA3OT
Member

Откуда: Над трубами, во чреве коих Яуза живет.
Сообщений: 2608
вадя,
Хм, вы правы, но если использовать RPAD, подравнивая девятками, то сортируя в обратном порядке всё может получиться.
*У меня искренняя ненависть к функциям и триггерам, причём небезосновательная.
8 ноя 18, 21:42    [21728775]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14693
MAPA3OT,
замена точек на нули приведёт только к увеличению разрядности числа.
девятки - странная логика...
вот добавить лидирующие нули через regexp - вот это было бы интересно
8 ноя 18, 21:54    [21728789]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
вадя
добавить лидирующие нули через regexp
Для этого нужен сервер версии 8+.
9 ноя 18, 07:55    [21728979]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
MAPA3OT
Каждый ява-программист хитрый садо-мазохист...
SELECT * from t_table order by CONVERT(REPLACE(some_field, '.', '0') SIGNED INTEGER);

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

вадя
тогда уж так
SELECT x  from test.table1  order BY CONVERT( RPAD(REPLACE(x, '.', ''),10,'0'),UNSIGNED integer) ;
То же самое, один в один.
9 ноя 18, 07:58    [21728981]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14693
Akina,

я то попробовал, вот для этого
3.16.11
3.15.02.03
единственно, что добавлены лидирующие нули вручную.
9 ноя 18, 09:11    [21729005]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка в SQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18095
вадя
я то попробовал, вот для этого
Для ЭТОГО вообще никакие телодвижения не нужны.
9 ноя 18, 10:04    [21729043]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить