2013-07-30 68 views
0

我最近從OpenOffice Base切換到MySQL社區。在ooBase中,您可以在將整數輸入數據庫時​​自定義整數。例如,我可以鍵入2013_00000,然後此列中的每個數字都將以這種方式格式化(2013_00001,2013_00002,...)。在與MySQL社區玩了一段時間之後,我注意到沒有明顯的方式來格式化這樣的自定義整數。我可能會忽略一些基本的東西,但如果有人知道如何做到這一點,請告訴我。謝謝在mysql中創建序列號的自定義格式示例

+0

Afaik,你需要一個觸發器。 –

+0

您是否需要*插入*格式化值,或者您是否需要一種方法來格式化* * select *語句返回的值? –

+0

@SylvainLeroux插入格式化值。它目前只是所有整數,但我想添加一年前綴作爲我所做的 – user2618927

回答

0

爲了在插入數據之前處理數據,您需要一個trigger

類似的東西:

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

如果你需要更新你行,你需要第二個觸發:

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有一組豐富的string functions。無論如何,這是原則。

+0

號碼的前綴,實際上需要更新。所以,當你說更新觸發器時,你只需要這樣寫:CREATE TRIGGER ON UPDATE ins_sn BEFORE INSERT ON tbl – user2618927

+0

@ user2618927我編輯了答案(和sqlfiddle演示)來演示'ON INSERT'和'ON UPDATE觸發器。 –

+0

@Sylvain_Leroux好的非常感謝你 – user2618927

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)[email protected], '0')); 
END; 
// 

An SQLfiddle to test with

+0

好吧我明白你使用這個代碼的原則。我希望有一個更簡單的點擊式解決方案,但我會嘗試使用觸發器。感謝這個想法 – user2618927