bigfrog 发表于 2015-3-17 21:51:49

求助关于如何得到最后记录的内容,并加其加1

不好意思,又来提问题了我的目的是在输入新的编号的时候,得到原来最末尾的编号再加一


这里是主要还是我的编号是由英文和字母构成,是字符型
比如我现在表内最后的编号是HF1256

我用 select max(客户编号) into:c_number from customer;
得到的数据是HF999,并不是跳转到最末尾的值,而且好像也不能将字符型直接+1

这里主要有2个疑问
怎么跳转到末尾记录
第二,怎么将字符记录加1?



ehxz 发表于 2015-3-18 00:29:08

首先楼主的这种记录模式不是很好。最好标准化如HF0000999在记录前保留足够的位数,以方便处理,这样,在加的时候就省事了。

如果使用楼主的模式,可以测试一下:
select max(substr(客户编号,3,20)) into:c_number :i_number from customer ;
c_number = "HF" + c_number
测试一下看

dusj 发表于 2015-3-18 16:30:52

HF1256和HF999这样的数据同时存在了确实是悲剧,截取掉前面的两个字母得到纯数字部分咯,不过你这样排序还是乱的。参考楼上意见在数字前面补足0。

ehxz 发表于 2015-3-18 18:31:48

有时候一个好的数据设计,可以避免一些“垃圾”代码

bigfrog 发表于 2015-3-19 20:39:35

ehxz 发表于 2015-3-18 00:29
首先楼主的这种记录模式不是很好。最好标准化如HF0000999在记录前保留足够的位数,以方便处理,这样,在加 ...

真奇怪
select max(substr(客户编号,3,20)) into:i_number from customer ;
c_number="HF"+string(i_number)

还是返回HF999

我也想改啊
主要是几个表涉及的数据太多
现在改工程量太大了

bigfrog 发表于 2015-3-19 22:52:25

研究出来了
用游标可以解决这个问题
declare c_n cursor for select "客户编号" from customer;
open c_n;
do While SQLCA.SqlCode = 0
fetch c_n into :c_number;

loop
close c_n;

c_bh="HF"+string(integer(right(c_number,4))+1)
dw_1.setitem(dw_1.rowcount(),"客户编号",c_bh)

不过这里对于客户编号的长度应该进行判断
如果是5位数,就取后面3位,6位就取后面4位,或者更多位数的延伸?这里要怎么写判断语句?

bigfrog 发表于 2015-4-2 20:39:40

关于用游标得到最后记录的问题,还是有问题
AHA输入的数据老是出现不按编号排列的情况
比如新的编号是HF1666,输入后最后一条记录还是HF1665,我用PB打开表,HF1666跑到其他地方去了
真是一个很奇怪的事情
不知道有其他方法解决不?

bigfrog 发表于 2015-4-3 20:54:57

有想出一种方法
long ll_count
select count(*) into :ll_count from customer ; //获得数据总额
c_bh="HF"+string(ll_count+1)//将数据+1前面+HF
dw_1.setitem(dw_1.rowcount(),"客户编号",c_bh)
不过这种方法只适用于产生的编号和我一样只递增,永远不删除记录的情况
希望能抛砖引玉
页: [1]
查看完整版本: 求助关于如何得到最后记录的内容,并加其加1

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com