我正在尝试创建一个SQL语句,在DESC中选择和排序数字但是将所有字符串放在最后
所以mysql是:
"SELECT * FROM posts ORDER BY price DESC"
这给了我类似的东西
test
best offer
6000
100
10
我想要的是:
6000
100
10
test
best offer
或(无关紧要)
6000
100
10
best offer
test
答案 0 :(得分:2)
SELECT * FROM posts
ORDER BY price * 1 DESC
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您通常不关心表现,可以这样做:
SELECT * FROM posts
ORDER BY
CASE CAST(price AS int) WHEN 0 THEN ' ' ELSE price END DESC,
price ASC;
根据您的数据库,您可能需要转换为int
。
你也可以摆弄第一个表达式来获得你想要的结果。关键是你必须首先根据它是否是数字进行排序,然后是实际内容。
问题是你不能这样使用任何索引。如果允许更改数据库结构,最好将数据拆分为两列。一个int
列,其中包含价格和varchar
列,其中包含价格说明(在这种情况下,第一列为NULL
)。然后你可以做更快的查询。