我有一个mysql_query
SELECT * FROM table ORDER BY CAST(row AS DECIMAL)
并希望更改排序方向 . 我尝试过ASC和DESC但两者都返回完全相同的排序方向 .
我该如何度假?
谢谢,问候
朱利安
这应该工作 . 您是否尝试显示CAST(行AS DECIMAL)产生的内容?
粘贴您尝试排序的数据示例 . 也许你有空值或者数字不适合十进制类型 .
你正在使用什么版本的mysql?也许原因是这个(来自mysql帮助):
存储格式的更改还意味着DECIMAL列不再支持允许值大于列定义隐含的范围的非标准扩展 .
我相信你可以在SELECT和ORDER BY那个新列中进行转换 . 下行当然你会在你的回复中得到1个额外的列,但是如果那个额外的列不会影响任何东西那么一切都很好 .
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
如果你的 row 列中只有一个 _ 字符,其中部分字母前是字母,而部分是数字之后,这将起作用:
row
_
SELECT * , SUBSTRING_INDEX(row, '_', 1) AS FirstPart , CAST(SUBSTRING_INDEX(row, '_', -1) AS UNSIGNED) AS SecondPart FROM TableX ORDER BY FirstPart , SecondPart
3 回答
这应该工作 . 您是否尝试显示CAST(行AS DECIMAL)产生的内容?
粘贴您尝试排序的数据示例 . 也许你有空值或者数字不适合十进制类型 .
你正在使用什么版本的mysql?也许原因是这个(来自mysql帮助):
我相信你可以在SELECT和ORDER BY那个新列中进行转换 . 下行当然你会在你的回复中得到1个额外的列,但是如果那个额外的列不会影响任何东西那么一切都很好 .
此外,您的DECIMAL应该理想地指定其精度 . =)
更多详情,请致电http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html
如果你的
row
列中只有一个_
字符,其中部分字母前是字母,而部分是数字之后,这将起作用: