我最近从 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));
如果需要更新行,则需要第二个触发器:
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 回答