在mysql中创建序列号的自定义格式示例

时间:2013-07-30 18:00:19

标签: mysql database integer

我最近从OpenOffice Base切换到了MySQL社区。在ooBase中,您可以在将整数输入数据库时​​自定义整数。例如,我可以键入2013_00000,然后此列中的每个数字都将以这种方式格式化(2013_00001,2013_00002,...)。在玩了一段时间的MySQL社区后,我注意到没有明显的方法来格式化这样的自定义整数。我可能会忽略一些基本的东西,但如果有人知道该怎么做,请告诉我。谢谢

2 个答案:

答案 0 :(得分: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。无论如何这是原则。

答案 1 :(得分: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;
//

An SQLfiddle to test with