0

MySQL データベースからのクエリの SQL ソート結果に問題があります。文字と複数桁の数字が混在する請求書番号を並べ替える方法が必要です。

フォーマットは: ${optional-prefix}${number part}${optional-postfix} で、すべて Varchar(32) に格納されます。値は複数のシステムからインポートされるため、数値形式を変更することはできません。

並べ替えたいもの: (未並べ替え)

  • IoCustTextNoNumber
  • イオ-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
  • イオ-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
  • イオ-700
  • イオ-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 に答える