我正在尝试创建以下格式的优惠券:
{month} / {date} / {serialNumber}
我正在从UI中选择月份和日期,所以我可以正确获取月份和日期,但是我的问题是:
serialNumber应该自动递增并
它应该再次从零开始一个新的日期
我试过的是:
private static Integer srNumber = 000;
public Coupon CouponCreation(Coupon coupon) {
String voucherNumber;
srNumber += srNumber + 001;
voucherNumber = (coupon.getTransactionDate().getMonth() + 1)
+ "/" + coupon.getTransactionDate().getDate()
+ "/" + srNumber;
coupon.setVoucherNumber(voucherNumber);
return coupon;
}
类优惠券包含所有getter和setter方法
在上面的代码中,我想生成srNumber,例如:001、002、003等
但是,如果更改了
coupon.getTransactionDate().getDate()
,则srNumber将再次从001、002开始,凭证编号应为08/02 / 001、08 / 02/002等
最佳答案
MySQL方法
表定义
CREATE TABLE v (
month int,
day int,
orderNum int);
一些启动价值
INSERT INTO v VALUES (1,1,1);
INSERT INTO v VALUES (1,1,2);
INSERT INTO v VALUES (1,1,3);
INSERT INTO v VALUES (1,2,1);
INSERT INTO v VALUES (1,2,2);
INSERT INTO v VALUES (1,3,1);
现在使用自动生成输入值
INSERT INTO v SELECT month,day,COUNT(orderNum)+1 FROM v WHERE month=1 AND day=1;
INSERT INTO v SELECT month,day,COUNT(orderNum)+1 FROM v WHERE month=1 AND day=1;
INSERT INTO v SELECT month,day,COUNT(orderNum)+1 FROM v WHERE month=1 AND day=1;
但是如果有更多专栏,上面的示例将使我们的生活陷入噩梦。
INSERT INTO v VALUES(1,1,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=1));
INSERT INTO v VALUES(1,2,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=2));
INSERT INTO v VALUES(1,3,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=3));
INSERT INTO v VALUES(1,4,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=4));
INSERT INTO v VALUES(1,4,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=4));
INSERT INTO v VALUES(1,1,(SELECT COUNT(orderNum)+1 FROM v AS v2 WHERE month=1 AND day=1));
上面的示例就是您要寻找的。不要忘记指定表别名(上面示例中的v2),否则插入将失败。
如果您现在执行
SELECT * FROM v ORDER BY month, day
然后您会看到,它也适用于隔天开始新的序列
如果将这些代码存储为单个字符串,则必须进行一些字符串吐出才能解决。为了避免这种情况,我建议将其更改为3个字段以使其更好,然后在应用程序中将其连接到字符串中