我正在尝试创建以下格式的优惠券:

{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个字段以使其更好,然后在应用程序中将其连接到字符串中

10-01 20:24