mysql - 在 MySQL 中订购发票号码和字母

标签 mysql sorting

我在对 MySQL 数据库的查询结果进行 SQL 排序时遇到问题。我需要一种方法来对混合有字母和多位数的发票号码进行排序。

格式为:${可选前缀}${数字部分}${可选后缀},它们都存储在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

谁能帮我解决一下吗?

最佳答案

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
     }
  }

}

关于mysql - 在 MySQL 中订购发票号码和字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617482/

相关文章:

mysql - 在mysql中创建触发器以将一个表中所做的更改保存到另一个表中

c - 读取文本文件并对两个数组进行排序

c++ - 如何仅根据第二个字符串对字符串 vector 的 vector 进行排序

mysql - 如何使用 INSERT INTO 正确地将数据插入表中?

c++ - 如何使用 Mysql++ 将 C++ 变量传递给 C++ 的 Insert

algorithm - 如何找到两个数组之间所有互斥的最近邻居

Java-对 int 数组进行排序

c - time.h 和文件中的算法 C 代码

php - 关于取回处理的通知

Mysql 子查询的执行