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