0

我的 MySQL 数据库中的查询的 SQL 排序结果出现问题。我需要一种方法来对混合了字母和多位数字的发票编号进行排序。

格式为:${optional-prefix}${number part}${optional-postfix},它们都存储在 Varchar(32) 中。更改数字格式不是一个选项,因为这些值是从多个系统导入的。

我要排序的内容:(未排序)

  • IoCustTextNoNumber
  • IO-700
  • IO39ABC
  • IO-137-kk
  • IO-037-kk
  • 201-ib
  • 201
  • 38-kk
  • 036
  • 12
  • 11-KE
  • IO-37-kk
  • 00001342
  • IO-36-kk
  • 11-KEk
  • 13
  • 035
  • 37-kk
  • 200
  • IO-701

预期结果:(已排序)

  • 11-KE
  • 11-KEk
  • 12
  • 13
  • 035
  • 036
  • 37-kk
  • 38-kk
  • 200
  • 201
  • 201-ib
  • 00001342
  • IO-36-kk
  • IO-037-kk
  • IO-37-kk
  • IO-137-kk
  • IO-700
  • IO-701
  • IO39ABC
  • IoCustTextNoNumber

任何人都可以帮我解决问题吗?

4

1 回答 1

1

MySQL 不会那样做。您可以在 PHP 之类的东西中构建自定义排序,然后执行 for 循环并将事物分配给某个位置。或者,您可以选择所有以 lo 开头的内容,然后更新所有这些内容以将 lo 放入另一列。

在 php 中,您可以执行以下操作:

foreach($data => row){

   $test = strpos('-', $row); // If this is successful than it has a dash in the string, and it goes towards the front.

  if(!$test) { // If its not a test does it begin with a number.
     if($row[0] >= 0){
         // Do whatever you need
     }
  }

}
于 2012-09-27T08:51:39.033 回答