【问题标题】:SQL order by string + integersSQL按字符串+整数排序
【发布时间】:2019-01-13 08:09:01
【问题描述】:

我如何订购一个以字符串结尾的 ID 的字符串?

例如,我想按末尾的数字(在 RSPP 之后)对这些字符串进行排序:

RSPP891
RSPP896
RSPP897
RSPP898
RSPP899
RSPP900
RSPP901
RSPP902
RSPP903
RSPP904
RSPP730
RSPP731
RSPP1380
RSPP733
RSPP734

我读了一些关于子字符串的东西,所以我尝试了这个查询,但没有任何成功。

SELECT `RsppTags` FROM Table WHERE ConnectionID = 15202  
ORDER BY
SUBSTR(RsppTags FROM 4 FOR LENGTH(RsppTags)-1),
CAST(SUBSTR(RsppTags FROM 1) AS UNSIGNED)

有没有可能得到这个数据ORDER BY ASC

【问题讨论】:

    标签: mysql sql substring


    【解决方案1】:

    SELECT RsppTags FROM Table WHERE ConnectionID = 15202 ORDER BY CAST(SUBSTR(RsppTags FROM 5) AS UNSIGNED)

    MYSQL 默认提供 ASC 排序。

    试试上面的查询。 它会帮助你。

    【讨论】:

      【解决方案2】:

      试试:

      ORDER BY CAST(SUBSTR(RsppTags FROM 5) AS UNSIGNED) ASC
      

      Sample SQL Fiddle showing the result

      【讨论】:

      • @SagarGangwal 这不是因为 ASC 是默认的排序顺序,但我包含了明确的关键字,我觉得这可能会有所帮助,因为它不假设数据库引擎如何排序的先验知识默认情况下。
      【解决方案3】:
      order by SUBSTR(RsppTags, 5) + 0
      

      【讨论】:

        【解决方案4】:

        试试

        SELECT `RsppTags` FROM Table WHERE ConnectionID = 15202  
        ORDER BY CAST(SUBSTR(RsppTags, 5) AS UNSIGNED) ASC;
        

        【讨论】:

          【解决方案5】:
          SELECT `RsppTags` 
          FROM Table WHERE ConnectionID = 15202  
          ORDER BY
          SUBSTR(RsppTags,1,4), 
          CAST(SUBSTR(RsppTags,5) AS UNSIGNED);
          

          【讨论】:

            猜你喜欢
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 2017-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多