sqlite中的拆分列值
我是sqlite新手,在我的学习中,我遇到了子字符串函数,因此在我的练习中,我的表名是t1,列值是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
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'
,另一列带有自动递增的数字
然而,说到这里,下面是如何生成下一个键,就像您的示例一样
您需要:
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中可能是一个“有效”的解决方案,但如果以后转到更并发的数据库,它将充满问题。