Sort longtext as int in SQL

2019-07-07 07:49发布

I have table in MySQL database where one column type is longtext and there are stored numbers. I need to get content from table sorted by numbers in that column.

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

With this query sorting is not proper and looks like:

0
1.6
10
5

but I need like this:

10
5
1.6
0

I may not change column type, because this column have many different types of data. Is there any possibility to change column type temporary in SQL query?

3条回答
再贱就再见
2楼-- · 2019-07-07 08:22

What you are looking for is CAST.

CAST(expr AS type)

Your SQL Query should look like this:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL) DESC
查看更多
可以哭但决不认输i
3楼-- · 2019-07-07 08:24

It's been over a year since the question was asked, but for reference to anyone that came here after the search, the answer is

CAST(meta_value AS DECIMAL(10,2))

so the query should be:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL(10,2)) DESC
查看更多
Evening l夕情丶
4楼-- · 2019-07-07 08:42

This can also be accomplished through native WordPress functions without having to resort to raw SQL. Give WP_Query an orderby parameter of meta_value_num rather than meta_value (reference).

查看更多
登录 后发表回答