mySQL CAST和ASC / DESC

时间:2012-02-19 19:09:11

标签: mysql sorting sql-order-by redirect

我有一个mysql_query

SELECT * FROM table ORDER BY CAST(row AS DECIMAL)

并想要更改排序方向。 我尝试了 ASC DESC 但两者都返回完全相同的排序方向。

我该如何度假?

谢谢,问候

儒略

3 个答案:

答案 0 :(得分:1)

那应该有用。您是否尝试过显示CAST(行AS DECIMAL)产生的内容?

粘贴您尝试排序的数据示例。也许你有空值或者数字不适合十进制类型。

您使用的是哪个版本的mysql?也许原因是这个(来自mysql帮助):

  

存储格式的更改也意味着不再使用DECIMAL列   支持允许值大于的非标准扩展   列定义隐含的范围。

答案 1 :(得分:1)

我相信你可以在SELECT和ORDER BY那个新列中进行转换。下行当然你会在你的回复中得到一个额外的列,但是如果那个额外的列不会影响任何东西那么一切都很好。

SELECT *, CAST(row AS DECIMAL(5,2)) AS tempCol FROM table ORDER BY tempCol

此外,您的DECIMAL应该理想地指定其精度。 =)

http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

的更多详情

答案 2 :(得分:1)

如果您的row列中只有一个_字符,其中部分字母为字母,而部分为数字后,则可以使用:

SELECT 
      *
    , SUBSTRING_INDEX(row, '_', 1) AS  FirstPart
    , CAST(SUBSTRING_INDEX(row, '_', -1) AS UNSIGNED) AS SecondPart
FROM 
      TableX
ORDER BY
      FirstPart
    , SecondPart