我已经为我们的预订系统写了一个发票模块。
因此,当我创建一个新发票时,我会通过MySQL自动生成一个主键。
然而,就目前而言,这只是一个简单的整数计数。
问题是我们必须有一个"#year#id“形式的发票号码,其中#year是2013年,#id是每年从1开始的id。
因此,例如20131,20132,20133,2014年将是20141,20142。
如何使用自定义主键生成器修复此问题?
发布于 2013-03-01 15:35:51
您可以在中创建两个字段,年份和id。
在两个字段上创建一个主键,为id提供auto_increment选项。对于每个唯一的year值,id将进行计数。例如:
2012 1
2012 2
2012 3
2013 1您可以在选择时将它们连接在一起: SELECT CONCAT(year,id)作为表中的主表
插入内容为:
插入表格集合year = YEAR(NOW())
您不必指定id。
发布于 2013-03-01 15:38:55
您应该使用过程或触发器。构建newInvoiceId的特定查询应该是这样的:
SELECT CONCAT(YEAR(now()),count(*)+1) as newInvoiceId
FROM table
WHERE InvoiceId like CONCAT(YEAR(now()),'%');我唯一不能百分之百自信的是CONCAT(YEAR(now()),'%')
发布于 2018-01-15 19:51:06
对像2012/01这样的天真年份/周发出警告。YEAR(NOW())错误。
最好使用YEARWEEK(NOW())。给出一个类似于201201的数字
下图显示年份不一定是周的年份数:
mysql> SELECT YEARWEEK('1987-01-01');
-> 198652对于其余的,在一个int中包含年和周,实际上更简单。
int year = yearweek / 100;
int week = yearweek % 100;https://stackoverflow.com/questions/15152718
复制相似问题