Задать вопрос

Как правильно отсортировать записи в БД?

Добрый день. У меня есть БД такого вида:
INSERT INTO `tokens` (`id`, `ticker`, `symbol`, `price`, `f_long`, `f_short`, `s_long`, `s_short`, `volume_5m`, `volatility`) VALUES
(22, 'AXS', 'AXSUSDT', 29.74, '30.38000;6957;211353;2.2;08.05.2022 16:46:33;0', '29.00000;11837;343273;2.4;08.05.2022 16:34:34;0', '29.96000000;3685.37000000;110413;0.8;08.05.2022 16:47:39;0', '29.54000000;4505.01000000;133077;0.6;08.05.2022 16:44:33;0', '7834.94000000;233522.11020000', 0.57),
(23, 'BAKE', 'BAKEUSDT', 0.5101, '', '', '', '', '40769.10000000;20803.43380000', 0.39),
(24, 'BAL', 'BALUSDT', 12.725, '', '', '', '', '253.24000000;3219.11980000', 0.16),
(25, 'BAND', 'BANDUSDT', 2.7832, '', '', '', '', '857.90000000;2390.26030000', 0.32),
(26, 'BAT', 'BATUSDT', 0.5528, '', '', '', '0.54920000;299874.00000000;164690;0.5;08.05.2022 16:46:42;0', '20586.00000000;11396.99290000', 0.31),

Мне нужно отсортировать таким образом записи, чтобы в поле s_short, записи отсортировали по 3-ему значению (там несколько видов данных разделенных символом ; ). Мне нужно по 3-ьему значению отсортировать. Делаю так:
SELECT * FROM `tokens` ORDER BY SUBSTRING_INDEX(s_short,';',3) DESC

В итоге я получаю сортировку: сверху записи, в которых есть хоть какие-то данные в s_short, но сортировки по 3-ему значению (я делю их разделителем ; ) нету. Подскажите пожалуйста, как отсортировать записи, чтобы брались значение с 3-его разделителя (это 110413; и 164690) и сортировались по убыванию
  • Вопрос задан
  • 113 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Согласен с Кирилл Пальчевский , что следует привести данные к нормальной форме, но если нужно то:
SELECT 
	`tokens`.* 
FROM `tokens` 
ORDER BY REPLACE(SUBSTRING_INDEX(s_short,';',3), SUBSTRING_INDEX(s_short,';',2), '') DESC;


Или компактный вариант предложенный Akina
SELECT 
  `tokens`.* 
FROM `tokens` 
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(s_short,';',3),';',-1) DESC;


MySQL SUBSTRING_INDEX test
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы