订单号和字符串最后放置字符串

时间:2013-12-10 20:09:54

标签: mysql

我正在尝试创建一个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

3 个答案:

答案 0 :(得分:2)

SELECT * FROM posts 
ORDER BY price * 1 DESC

SQLFiddle demo

答案 1 :(得分:1)

我认为你真正想要的是:

SELECT * FROM t ORDER BY value ASC;

返回:

10
100
6000
best offer
test

SQL Fiddle

答案 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)。然后你可以做更快的查询。