我最近从OpenOffice Base切换到MySQL社区。在ooBase中,您可以在将整数输入数据库时自定义整数。例如,我可以键入2013_00000,然后此列中的每个数字都将以这种方式格式化(2013_00001,2013_00002,...)。在与MySQL社区玩了一段时间之后,我注意到没有明显的方式来格式化这样的自定义整数。我可能会忽略一些基本的东西,但如果有人知道如何做到这一点,请告诉我。谢谢在mysql中创建序列号的自定义格式示例
回答
为了在插入数据之前处理数据,您需要一个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。无论如何,这是原则。
号码的前缀,实际上需要更新。所以,当你说更新触发器时,你只需要这样写:CREATE TRIGGER ON UPDATE ins_sn BEFORE INSERT ON tbl – user2618927
@ user2618927我编辑了答案(和sqlfiddle演示)来演示'ON INSERT'和'ON UPDATE触发器。 –
@Sylvain_Leroux好的非常感谢你 – user2618927
不是最灵活的(这里锁定到一个下划线分隔符),但你可以用触发器做到这一点,
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;
//
好吧我明白你使用这个代码的原则。我希望有一个更简单的点击式解决方案,但我会尝试使用触发器。感谢这个想法 – user2618927
- 1. Highcharts列图自定义图例格式不显示图例符号
- 2. Yii2格式化程序 - 创建自定义格式
- 3. 自定义编号格式
- 4. MySQL数据库与用户创建表与自定义列号
- 5. 如何创建自定义网格列?
- 6. Excel中的自定义格式号码
- 7. 自定义的有序列表格式
- 8. Django的自定义序列格式
- 9. 创建自定义成员资格提供程序的示例代码
- 10. 如何在java中使用单例模式创建序列号
- 11. 如何在Android中创建自定义视图组示例
- 12. 在.NET中创建自定义DateTime格式的地方C#
- 13. 在CellTable列中创建自定义ActionCell
- 14. 如何在LibreOffice中创建(编号)系列自定义Intervalls
- 15. 如何在Textmate中创建自定义符号列表项?
- 16. 如何在kafka中创建自定义序列化程序?
- 17. 创建自定义样式
- 18. 创建自定义样式
- 19. 创建自定义队列
- 20. 在MYSQL中创建序列
- 21. 在php中创建自定义日期格式
- 22. 在Excel中创建自定义时间格式
- 23. 在java中创建自定义图像格式
- 24. 如何为自定义应用程序创建文件格式
- 25. 创建自定义“操作”格式化程序 - jqgrid
- 26. 在OpenCv中创建CvPoint的自定义序列
- 27. 在Linux内核中创建您自己的自定义信号
- 28. 从mysql中的json请求创建自定义列表视图
- 29. 如何根据行创建的日期在PostgreSQL中创建自定义序列?
- 30. 在android上创建自定义格式的对话框
Afaik,你需要一个触发器。 –
您是否需要*插入*格式化值,或者您是否需要一种方法来格式化* * select *语句返回的值? –
@SylvainLeroux插入格式化值。它目前只是所有整数,但我想添加一年前缀作为我所做的 – user2618927