1

列の 1 つの値が順次増加するテーブルに複数の値を挿入したいと考えています。ただし、ビジネス要件のため、シーケンスは少し複雑です。

単一の挿入は次のようになります。

INSERT INTO blah (col1, col2) VALUES ('SU0001', 'myemail');

ここで、col1 はインクリメントする必要がある値ですが、固定長構造を維持します。したがって、次の挿入は次のようになります。

INSERT INTO blah (col1, col2) VALUES ('SU0002', 'myemail');

など..まで:

INSERT INTO blah (col1, col2) VALUES ('SU1600', 'myemail');

SQLのみでこれを行うにはどうすればよいですか。これは Java と Ruby で簡単に実行できますが、これに行き詰まり、いくつかのことを試しましたが、ほとんどが固定長構造を維持していないようです (SU0001、SU0002 ではなく、SU1、SU2 になります)。

助けてくれてありがとう!

ヴィクラム

4

2 に答える 2

2

すでにインクリメントを下げているので、欠けているのはLPAD.

LPAD(@i, 4, '0')

@i結果の文字列が少なくとも 4 文字幅になるように、'0' の繰り返しを の左側に追加します。

インクリメント ロジックをトリガーに配置することもできます。

delimiter //
CREATE TRIGGER incr_col1 BEFORE INSERT ON blah
FOR EACH ROW BEGIN
  SET @prev=(SELECT COALESCE(MAX(col1), 0) FROM blah);
  SET NEW.col1 = CONCAT('SU', LPAD(1+SUBSTR(@prev, 3), 4, '0'));
END //
delimiter ;
于 2010-02-15T05:25:00.280 に答える
0

0-9 で TEMPORARY TABLE を作成する

この後、そのテーブル自体を必要な回数だけ結合するクエリを作成します(2 - 00 - 99 など)

この後、サブクエリから INSERT ... SELECT を実行します

;-)

および先行ゼロの LPAD()

于 2010-02-15T05:13:26.730 に答える