Сортировать longtext как int в SQL - PullRequest
3 голосов
/ 15 января 2012

У меня есть таблица в базе данных MySQL, где один тип столбца является длинным текстом и есть сохраненные числа.Мне нужно получить содержимое из таблицы, отсортированной по номерам в этом столбце.

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY meta_value

При таком запросе сортировка некорректна и выглядит следующим образом:

0
1.6
10
5

, но мне нужно вот так:

10
5
1.6
0

Я не могу изменить тип столбца, так как в этом столбце много разных типов данных.Есть ли возможность изменить тип столбца временно в запросе SQL?

Ответы [ 3 ]

9 голосов
/ 15 января 2012

То, что вы ищете, это CAST.

CAST(expr AS type)

Ваш SQL-запрос должен выглядеть следующим образом:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL) DESC
1 голос
/ 02 февраля 2015

Прошло больше года с тех пор, как вопрос был задан, но для справки всем, кто пришел сюда после поиска, ответ:

CAST (meta_value AS DECIMAL (10,2))

поэтому запрос должен быть:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL(10,2)) DESC
1 голос
/ 21 мая 2013

Этого также можно достичь с помощью встроенных функций WordPress, не прибегая к необработанному SQL.Присвойте WP_Query параметр orderby meta_value_num вместо meta_value ( ссылка ).

...