在SQL中将longtext排序为int

时间:2012-01-14 20:21:00

标签: mysql sql wordpress sql-order-by

我在MySQL数据库中有一个表,其中一列类型是longtext并且存储了数字。我需要从表中按照该列中的数字排序来获取内容。

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 个答案:

答案 0 :(得分:9)

您要找的是CAST

CAST(expr AS type)

您的SQL查询应如下所示:

SELECT * FROM wp_postmeta WHERE meta_key = 'rating_avg' ORDER BY CAST(`meta_value` AS DECIMAL) DESC

答案 1 :(得分:1)

这也可以通过原生WordPress功能实现,而不必使用原始SQL。为WP_Query提供meta_value_num而不是meta_valuereference)的orderby参数。

答案 2 :(得分:1)

问题问题已经过了一年多了,但是在搜索后来到这里的任何人都可以参考,答案是

  

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