【问题标题】:mySQL CAST and ASC / DESCmySQL CAST 和 ASC / DESC
【发布时间】:2012-02-19 19:09:10
【问题描述】:

我有一个 mysql_query

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

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

我该如何解决?

谢谢,问候

朱利安

【问题讨论】:

    标签: mysql sorting sql-order-by redirect


    【解决方案1】:

    应该可以。您是否尝试过显示您的 CAST(row AS DECIMAL) 产生了什么?

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

    你用的是什么版本的mysql?也许原因是这样的(来自 mysql 帮助):

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

    【讨论】:

    • 我使用一个带有 GUI 的远程应用程序,称为 Sequel Pro。 CAST(row AS DECIMAL) 产生我期望的输出。如果没有CAST(row AS DECIMAL),我可以根据需要重新排序输出。没有NULL。我使用示例数据来测试代码:{"a_1", "a_2", "a_10", "b_1", "b_2", "b_10"} 作为 row 的值
    • 我想将这些数据“按字母顺序”和数字排序(这样 a_2 在 a_1 之后,a_10 在 a_2 之后)
    【解决方案2】:

    我相信您可以在 SELECT 中进行投射,然后按该新列排序。缺点当然是您的回复中会多出 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

    【讨论】:

    • 我不敢相信……这看起来很不错,但也不行!每次我在查询中调用 CAST 时,DESC 或 ASC 都不会产生任何影响!我真的不知道为什么……
    • 试试这个:select *, cast(left(row, charindex('')) as INT) from table order by cast(left(row, charindex('' )) 作为 INT)
    • 啊,'row'列是TEXT数据类型的?也许它与将其转换为数字格式有关。
    • @jsamraj:也许吧。但是我怎么能做排序呢?内容是{"a_1", "a_2", "a_10", "b_1", "b_2", "b_10"},当我对它进行ASC或DESC排序时,它输出:{"a_1", "a_10", "a_2", "b_1", "b_10", "b_2"}但那是错误的,因为2应该在1之后,10在2之后,依此类推。
    • 啊,@Kamil 认为 charindex 仅特定于 MS SQL。 MySQL 的一个是 substring_index =)
    【解决方案3】:

    如果您的row 列中只有一个_ 字符,并且在字母之前的部分和数字之后的部分,这将起作用:

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

    【讨论】:

    • 如果查询是静态的,我会拆分字符串。但它必须是动态的。我将列名和方向(ASC 或 DESC)传递给进行查询并将返回的内容传递回主页的 PHP 脚本。
    • AND 单元格的 content 可以是任何内容。这是用户输入。
    • 是什么阻止您将此查询与生成动态查询的 PHP 脚本一起使用?
    • 定义“随便”。内容可以是'abc_123' 和'abc_1_2_3' 和'abc.1.2.3' 和'a._1.b1_23a'(可能还有许多其他变体)?
    • SUBSTRING_INDEX - 非常酷的功能,从未听说过 :) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2017-10-27
    • 2019-06-09
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多