sqlite instr函数在某些情况下不起作用

时间:2019-04-18 13:15:53

标签: string sqlite position

在Sqlite中,我们具有带有列column1的table1 有4行,其中column1具有以下值

(p1,p10,p11,p20)

DROP TABLE IF EXISTS table1;
CREATE TABLE table1(column1 NVARCHAR);
INSERT INTO table1 (column1) values ('p1'),('p10'),('p11'),('p20');
Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',','+column1+',') from table1;

我们必须获取给定字符串中column1的每个值的位置:
,p112,p108,p124,p204,p11,p1124,p1,p10,p20,

查询

Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',column1) from table1;

返回值     (2,7,2,17)

这不是我们想要的

查询

Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',','+column1+',') from table1;

为所有行返回9- 原来这是第一个“ 0”符号的位置???

如何在sqlite中获取给定字符串中column1的确切位置?

1 个答案:

答案 0 :(得分:2)

SQLite 中,串联运算符是||而不是+(例如 SQL Server ),因此请执行以下操作:

Select instr(',p112,p108,p124,p204,p11,p1124,p1,p10,p20,',',' || column1 || ',') from table1;

您对代码执行的操作是将数字加到0,因为没有任何字符串操作数可以成功地转换为数字,
因此instr()正在搜索'0',发现它始终位于字符串9的位置',p112,p108,p124,p204,p11,p1124,p1,p10,p20,'