如何在插入数据的时候生成订单号呢?

格式是字母开头-年月日00001

比如今天,SFKD-20191113000001

SFKD-20191113000002这样往下走。

明天就是SFKD-20191114000001

SFKD-20191114000002

不知道公式里有没有什么好办法实现?

FineReport apengjun 发布于 2019-11-13 15:25
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
JackloveLv7高级互助
发布于2019-11-13 15:26(编辑于 2019-11-13 15:50)

可以的 

CONCATENATE("SFKD-", format(today(), "yyyyMMdd"),取这个日子数据的最大值加1)如果怕并发把这个公式写到填报属性里面就好了


最佳回答
0
shirokoLv6资深互助
发布于2019-11-13 15:29

CONCATENATE(MID("SFKD-20191113000001",1,5),MID("SFKD-20191113000001",6,14)+1)

这个是加1的代码,具体看怎么用怎么改

最佳回答
0
firegunzxLv6高级互助
发布于2019-11-13 15:29(编辑于 2019-11-13 15:30)

用公式

可以通过公式生成:

下面是我的例子,ID规则是SO开头+8位日期+4位流水

在A1单元格用sql取出当前日期的ID最大值,

然后在N2单元格里填入公式=seq()计算出序号,

然后在ID单元格里填入下面的公式

=if(len(A1)==0,"SO" + format(today(), "yyyyMMdd")+right(CONCATENATE("000", N2), 4),left(A1,10)+right(CONCATENATE("000", TOINTEGER(right(O1,4))+N2), 4))


最佳回答
0
孤陌Lv6资深互助
发布于2019-11-13 15:34

你这样弄考虑过并发问题吗??还有考虑过 今天提交了又重新打开填报的问题吗??

  • apengjun apengjun(提问者) 是不是要在插入的时候进行下校验
    2019-11-13 15:36 
  • 孤陌 孤陌 回复 apengjun(提问者) 如果多个人打开也根本没有用
    2019-11-13 15:40 
  • 孤陌 孤陌 回复 apengjun(提问者) 如果就一个人打开 还是可以做做的
    2019-11-13 15:41 
  • 孤陌 孤陌 回复 apengjun(提问者) \"SFKD\" + FORMAT(TODAY(),\"yyyyMMdd\")+FORMAT(ds1.select(rkxh) + 1, \"0000\") 数据集里 的SQL 加个当前日期的过滤条件然后统计当有几条数据就好了 如果是插入行 那就把+1修改成SEQ()
    2019-11-13 15:47 
  • Jacklove Jacklove 回复 孤陌 其实这个字段不要放在单元格里面生成比较好 把这个公式放到填报里面让它后台去生成 可以避免并发
    2019-11-13 15:53 
最佳回答
0
凌建Lv7高级互助
发布于2019-11-13 15:37

写个存储过程,稳一点。这种我一般不会在帆软上直接操作的,我也不建议

  • apengjun apengjun(提问者) 那是不是应该在sql 下的字段默认值里做
    2019-11-13 15:43 
  • 凌建 凌建 回复 apengjun(提问者) 那就写个存储过程触发查询好了,因为你这个也要避免重复的
    2019-11-13 15:47 
  • apengjun apengjun(提问者) 回复 凌建 嗯,我觉得在sql用触发器+序列发生器来做吧。找到了这个。 Sequence + 触发器. 因为 Sequence 是你 获取一次以后, 下一个人获取, 就是新的了。 不需要去检索当前表的 最大值。 Sequence 初始创建的时候, 可以从 1开始, 也可以从 100 开始, 取决于你怎么创建的。 例如: SQL> CREATE SEQUENCE test_sequence2 2 increment by 1 -- 每次递增1 3 start with 1 -- 从1开始 4 nomaxvalue -- 没有最大值 5 minvalue 1 -- 最小值=1 6 NOCYCLE; -- 不循环 Sequence created. 序号号创建好了, 就是触发器里面, 完成 订单号 := \'SOD\' || TO_CHAR( test_sequence2.nextval ) 如果你那个 订单号的格式, 还是 SOD 后面固定9位数字的 如果从1开始, 要求是 SOD0000001 的话 那么在使用个数据库的函数, 把 1 格式化为 0000001, 然后再用 SOD 与这个字符串合并
    2019-11-14 13:03 
  • 凌建 凌建 回复 apengjun(提问者) 你只要能实现,步骤随意。结果没问题就ok的
    2019-11-14 13:14 
  • 6关注人数
  • 559浏览人数
  • 最后回答于:2019-11-13 15:50
    请选择关闭问题的原因
    确定 取消
    返回顶部