在sqlite

时间:2017-08-02 05:11:18

标签: sqlite

在我的学习中我是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.请有人帮助我。

1 个答案:

答案 0 :(得分:1)

虽然我的解决方案可行,但我建议您不要使用这种类型的密钥生成。 " SELECT MAX(ID)+ 1"生成下一个密钥将在更多并发数据库中充满问题,并且您可能会在繁忙的应用程序/系统中生成重复密钥。

最好将密钥拆分为两列,一列是组或名称'Partha',另一列是自动递增的数字。

然而,话说回来,这就是如何像你的例子一样生成下一个键。

你需要:

  1. 将密钥拆分为两个
  2. 增加数字部分
  3. 将其转换回字符串
  4. 将其填充为6位
  5. 这是执行此操作的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
                                       ^