Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite中的拆分列值_Sqlite - Fatal编程技术网

sqlite中的拆分列值

sqlite中的拆分列值,sqlite,Sqlite,我是sqlite新手,在我的学习中,我遇到了子字符串函数,因此在我的练习中,我的表名是t1,列值是Partha000099我想在尝试使用时增加1,例如,Partha000100 SELECT SUBSTR(MAX(ID),6) FROM t1 当我用下面的查询递增1时,我得到的输出是000099 SELECT SUBSTR(MAX(ID),6)+1 FROM t1 我得到的输出是100,现在我的问题是如何按照我的预期构建它 我尝试了下面的查询 SELECT 'Partha' || SUBST

我是sqlite新手,在我的学习中,我遇到了子字符串函数,因此在我的练习中,我的表名是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。请找个人来帮我

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

最好将密钥分成两列,一列带有组或名称
'Partha'
,另一列带有自动递增的数字

然而,说到这里,下面是如何生成下一个键,就像您的示例一样

您需要:

  • 把钥匙一分为二
  • 增加数字部分
  • 将其转换回字符串
  • 将其填充到6位数
  • 下面是实现这一点的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个字符是
    Partha
    中的最后一个
    a
    ,因此要获取
    Partha100
    ,您需要:

    SELECT 'Partha' || (SUBSTR(MAX(ID),7)+1) FROM t1
                                       ^
    

    为什么是4,当
    Partha
    有六个字符时?对不起,这是我的错误,它是6如果您是sqlite的新手,我应该通知您应该避免使用这种密钥。如果您想要一个自动递增的数字,请创建一列来为您实现这一点,然后将其与“组”或类似的(无论Partha是什么意思)组合在一个单独的列中。获取下一个id的“select max(id)+1”在sqlite中可能是一个“有效”的解决方案,但如果以后转到更并发的数据库,它将充满问题。