0

連続番号 (MS-1、MS-2、...、MS-100、...、MS-800 など) のフィールドを持つ MySQL テーブルがあります。これらの番号は一意の識別子です (主キーではありません)。一連のデータの場合。問題は並べ替えです。このフィールドを取得して、並べ替えに使用する新しいフィールドを生成する方法はありますか? MS-1 を ms0001、MS-845 を ms0845 などにする必要があります。

元の値 (MS-1) を含むフィールドと、正規化された値 "ms0001" を含むフィールドの 2 つのフィールドが必要です。MS-1 は表示に使用され、ms0001 はリンクに使用されます。

また、このフィールドは新しい行に対して自動的に生成される必要があります。

ありがとう!

更新:eggyal が示唆するように、私はこれを試しました:

UPDATE Resources 
SET collNum = CONCAT('MS-',LPAD(SUBSTRING_INDEX(eadFaUniqueIdentifier,'-',-1),4,'0')

Resources は問題のテーブル、
collNum は生成しようとしている新しいフィールド、
eadFaUniqueIdentifier には元の値が含まれています。

ただし、次のエラーが表示されます: #1064 - SQL 構文にエラーがあります。2 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください (MySQL 5.1.61 を使用しています)。

4

2 に答える 2

1
ORDER BY CHAR_LENGTH(field), field
于 2012-08-04T15:53:23.543 に答える
1

egyal の回答を参考にしてください: https://stackoverflow.com/a/11809954/491243
しかし、その値を永久に変更したい場合は、これを試すことができます:

UPDATE myTable
SET columnA = CASE char_length(replace(columnA,'MS-', ''))
                   WHEN 0 THEN 'MS-0000'
                   WHEN 1 THEN CONCAT('MS-000', replace(columnA, 'MS-', ''))
                   WHEN 2 THEN CONCAT('MS-00', replace(columnA, 'MS-', ''))
                   WHEN 3 THEN CONCAT('MS-0', replace(columnA, 'MS-', ''))
                   ELSE        columnA
              END

myTable- 元のテーブル名に変更します-値
columnAを含む列の名前に変更しますMS-*

egyal が示唆するように:

UPDATE myTable 
SET columnA = CONCAT('MS-',LPAD(SUBSTRING_INDEX(columnA,'-',-1),4,'0'))
于 2012-08-04T15:59:08.970 に答える