2010-02-15 21 views
1

我想在一個表中插入多個值,其中一個列增量的值是按順序排列的。但是,由於業務需求,序列有點複雜。MySQL手動插入多個固定長度值

的單個插入會去是這樣的:

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中做到這一點,但我堅持這一點,並嘗試了幾件事情,但大多數似乎沒有保持固定長度結構(它成爲SU1,SU2,而不是SU0001,SU0002)。

感謝您的幫助!

維克拉姆

回答

2

既然你已經減少了增量,那麼你缺少的就是LPAD。使得所得的字符串是寬至少4個字符

LPAD(@i, 4, '0') 

將添加的「0」的重複來的@i左側。

你甚至可以把增量邏輯放在trigger

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 ; 
0

了一個按需加入該表的自我儘可能多的時候,這撰寫查詢後創建0-9

臨時表(2 - 爲00 - 99等)

在此之後做INSERT ...從子查詢

;-)

和LPAD()選擇前導零

+0

對不起,這是一個愚蠢的,但你可以給我一點與查詢的例子嗎? –

+0

SELECT CONCAT(t1.num,t2.num)FROM table t1 INNER JOIN table t2 or t1.num * 10 + t2.num instead of CONCAT() – zerkms