我在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查询中临时更改列类型?
答案 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_value
(reference)的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