【问题标题】:how to sort varchar numeric columns? [duplicate]如何对 varchar 数字列进行排序? [复制]
【发布时间】:2014-05-28 07:06:24
【问题描述】:

我写... ORDER BY专栏ASC 但我的专栏是VARCHAR,它的排序错误就像

我想对数值进行排序,但它的数据类型是 varchar 那么如何 像这样的价值

1.2.840.113619.2.55.3.163578213.42.1355218116.691.1
1.2.840.113619.2.55.3.163578213.42.1355218116.691.10
1.2.840.113619.2.55.3.163578213.42.1355218116.691.100
1.2.840.113619.2.55.3.163578213.42.1355218116.691.101
1.2.840.113619.2.55.3.163578213.42.1355218116.691.2
1.2.840.113619.2.55.3.163578213.42.1355218116.691.20

但我想按顺序排在最后

1.2.840.113619.2.55.3.163578213.42.1355218116.691.1
1.2.840.113619.2.55.3.163578213.42.1355218116.691.2
1.2.840.113619.2.55.3.163578213.42.1355218116.691.10
1.2.840.113619.2.55.3.163578213.42.1355218116.691.20
1.2.840.113619.2.55.3.163578213.42.1355218116.691.100
1.2.840.113619.2.55.3.163578213.42.1355218116.691.101

我也有这样的字符串

1.2.840.114257.0.10325113632288210457800001002296133400001
1.2.840.114257.0.10379710976288210457800000002296491200000
1.2.840.114257.0.10328923264288210457800000002296158400001

我也想排序这个...

【问题讨论】:

  • 只对最后一位进行排序?
  • 那叫Natural Sort
  • 不,我想对整个字符串进行排序
  • 我认为你应该重新设计你的架构。

标签: mysql sql


【解决方案1】:

对于您的具体示例,您可以这样做:

ORDER BY length(col), col

如果您有其他示例,您可能需要使用 substring_index()“解析”这些值。

【讨论】:

  • 请详细说明你的答案?
【解决方案2】:

我已经尝试了以下方法,它工作正常。 首先从字符串中删除".",这样你就只有数字,然后使用ABC()函数排序,这样就不会被截断。

SELECT yourcol AS v FROM test ORDER BY ABS(REPLACE(yourcol, '.', '')), yourcol;

【讨论】:

    【解决方案3】:

    我认为你应该重新设计你的架构,

    如果您的输入中只有数字,请选择@Gordon Linoff 答案
    或者您的输入可能还包含字符串(eg: ankit123),并且您希望按该字符和数字进行排序,而不是您可能会这样做

    你必须像这样implementing任何Algorithm

    eg

    1 >1.2.1
    2 >1.2.10
    3 >1.2.2
    

    现在使所有数字相等,确定任何max 长度(eg: 5),因此在前面附加 0 以使所有数字具有相同长度

    现在上面的字符串看起来像

    1 >00001.00002.00001
    2 >00001.00002.00010
    3 >00001.00002.00002
    

    现在,如果您在此字符串上触发 ORDER BY,您的输出将按排序顺序排列。

    【讨论】:

    • 这个字符串是预定义的字符串,我们不能在这个字符串中改变
    • 您可以将临时列存储在其中并在该列上调用 order by
    • @ankit337:无需编辑您的答案并推荐 Gordon 的。你的答案很完美。该列不包含数字,而是由数字部分构建的字符串。因此,必须重新设计数据库并存储单独的数字或应用您描述的算法。是的,如果所有数字部分(最后一个除外)都具有恒定长度,则 Gordon 的答案有效。
    • @Thorsetn kettner 是的,你是对的,但我认为这些人想要对仅包含数字的列进行排序,这就是我推荐 Gordon 的答案的方式,在这种情况下它比我更值得。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2021-10-28
    • 2015-12-18
    • 2013-05-27
    • 2010-09-12
    相关资源
    最近更新 更多