0

最近、OpenOffice Base から MySQL コミュニティに切り替えました。ooBase では、データベースに入力する際に​​整数をカスタマイズできます。たとえば、2013_00000 と入力すると、この列のすべての数値がこのようにフォーマットされます (2013_00001、2013_00002、...)。しばらく MySQL コミュニティで遊んだ後、このようなカスタム整数をフォーマットする明確な方法がないことに気付きました。基本的なことを見落としているかもしれませんが、これを行う方法を知っている人は教えてください。ありがとうございました

4

2 に答える 2

0

データを挿入する前にデータを操作するには、トリガーが必要です。

そんな感じ:

CREATE TRIGGER ins_sn BEFORE INSERT ON tbl
FOR EACH ROW
    SET NEW.sn = CONCAT(LEFT(NEW.sn, 4), '_', RIGHT(NEW.sn,5));

行を更新する必要がある場合は、2 つ目のトリガーが必要です。

CREATE TRIGGER upd_sn BEFORE UPDATE ON tbl
FOR EACH ROW
    SET NEW.sn = CONCAT(LEFT(NEW.sn, 4), '_', RIGHT(NEW.sn,5));

完全な例については、http://sqlfiddle.com/#!2/01428/1を参照してください。

ここでは、簡単にするために、関数と関数CONCAT()LEFT()使用します。RIGHT()おそらく、データにはより複雑な操作 (つまり、パディング) が必要です。MySQL には、文字列関数の豊富なセットがあります。とにかくこれが原則です。

于 2013-07-30T18:32:21.543 に答える
0

最も柔軟ではありませんが (ここではアンダースコア区切り記号にロックダウンされています)、次のようなトリガーを使用して実行できます。

CREATE TRIGGER trig_MyTable BEFORE INSERT ON MyTable
FOR EACH ROW
BEGIN
  SELECT seq into @seq FROM MyTable_Seq FOR UPDATE;
  SET NEW.id = @seq, @cutoff = LOCATE('_', @Seq);
  UPDATE MyTable_Seq SET Seq = 
         CONCAT(LEFT(@seq, @cutoff), 
                LPAD(SUBSTR(@seq, @cutoff+1)+1, LENGTH(@seq)-@cutoff, '0')); 
END;
//

でテストする SQLfiddle

于 2013-07-30T18:32:29.940 に答える