在我的学习中我是sqlite的新手我遇到了subString函数,所以在我的练习中,我的表名是t1,我的列值是Partha000099
我想增加1,例如。Partha000100
当我尝试
SELECT SUBSTR(MAX(ID),6) FROM t1
当我使用以下查询
递增1时,输出为000099
SELECT SUBSTR(MAX(ID),6)+1 FROM t1
我的输出为100,现在我的问题是如何按照我的预期重新构建它 我尝试使用以下查询,
SELECT 'Partha' || SUBSTR(MAX(ID),6)+1 FROM t1
我的输出为1.请有人帮助我。
答案 0 :(得分:1)
虽然我的解决方案可行,但我建议您不要使用这种类型的密钥生成。 " SELECT MAX(ID)+ 1"生成下一个密钥将在更多并发数据库中充满问题,并且您可能会在繁忙的应用程序/系统中生成重复密钥。
最好将密钥拆分为两列,一列是组或名称'Partha'
,另一列是自动递增的数字。
然而,话说回来,这就是如何像你的例子一样生成下一个键。
你需要:
这是执行此操作的SQL:
SELECT SUBSTR(ID, 1, 6) || SUBSTR('000000' || (SUBSTR(MAX(ID), 7)+1), -6) FROM t1;
要将其填充为6位数,我将前置6个零,然后使用此类型的表达式从结果字符串中获取最后6位数
SUBSTR(x, -6)
你得到1的原因是你的表达式分组如下:
SELECT .... + 1
然后,....
部分,你的字符串连接被尝试转换为数字,结果为0,因此0 + 1给出1。
要获得未填充的结果,您可以添加一些括号:
SELECT 'Partha' || (SUBSTR(MAX(ID),6)+1) FROM t1
^ ^
然而,这也是错误的,因为它会返回Partha1
,这是因为SUBSTR(..., 6)
抓住第6个字符及以后,第6个字符是a
中的Partha
{1}},所以要获得Partha100
,您需要这样:
SELECT 'Partha' || (SUBSTR(MAX(ID),7)+1) FROM t1
^